1 IO(Input Output)流概述
- IO流用来处理设备之间的数据传输。
- java对数据的操作是通过流的方式。
- java用于操作流的对象都在IO包中。
- 流按操作数据分为两种:字节流和字符流。
- 流按流向分为:输入流和输出流。
2 IO流常用基流
- 字节流的抽象基类
- 字符流的抽象基类
- 注意:由这四个类派生出来的子类名称都是以其父类作为子类名的后缀,如InputStream的子类FileInputStream,Reader的子类FileReader。
3 FileWriter
3.1 FileWriter简介
3.2 FileWriter的构造方法
- 根据给定的File对象构造一个FileWriter对象
public FileWriter(File file)
throws IOException
- 根据给定的File对象构造一个FileWriter对象,如果boolean的值为true,则将字符写入文件末尾处。
public FileWriter(File file,
boolean append)
throws IOException
public FileWriter(String fileName)
throws IOException
- 根据给定的文件名构造一个FileWriter对象,如果boolean的值是true,则将字符写入到文件末尾
public FileWriter(String fileName,
boolean append)
throws IOException
package java19;
import java.io.FileWriter;
import java.io.IOException;
/**
* 2017/10/12
* 说明:
*/
public class FileWriterDemo {
public static void main(String[] args) throws IOException {
/**
* 创建一个向文件中写入字符数据的字符输出流对象
* 如果文件不存在,则自动创建
* 如果文件存在,则会被覆盖
*/
FileWriter writer = new FileWriter("demo.txt");
/**
* 调用Writer中的方法
*/
writer.write("你好,世界");
//刷新
writer.flush();
//字符输出流关闭
writer.close();
}
}
- 注意:在关闭流之后,再调用flush()或wirter()会导致抛出IOException。
package java19;
import java.io.FileWriter;
import java.io.IOException;
/**
* 2017/10/12
* 说明:
*/
public class FileWriterDemo {
private static final String LINE_SEPARTOR = System.getProperty("line.separator");
public static void main(String[] args) throws IOException {
/**
* 创建一个向文件中写入字符数据的字符输出流对象
* 如果文件不存在,则自动创建
* 如果文件存在,则会被覆盖
*/
FileWriter writer = new FileWriter("demo.txt");
/**
* 调用Writer中的方法
*/
writer.write("你好,"+LINE_SEPARTOR+"世界");
//刷新
writer.flush();
//字符输出流关闭
writer.close();
}
}
package java19;
import java.io.FileWriter;
import java.io.IOException;
/**
* 2017/10/12
* 说明:
*/
public class FileWriterDemo {
private static final String LINE_SEPARTOR = System.getProperty("line.separator");
public static void main(String[] args) throws IOException {
/**
* 创建一个向文件中写入字符数据的字符输出流对象
* 如果文件不存在,则自动创建
* 如果文件存在,则会被覆盖
*/
FileWriter writer = new FileWriter("demo.txt",true);
/**
* 调用Writer中的方法
*/
// writer.write("你好,"+LINE_SEPARTOR+"世界");
writer.write("haha");
//刷新
writer.flush();
//字符输出流关闭
writer.close();
}
}
package java19;
import java.io.FileWriter;
import java.io.IOException;
/**
* 2017/10/12
* 说明:
*/
public class FileWriterDemo {
private static final String LINE_SEPARTOR = System.getProperty("line.separator");
public static void main(String[] args) {
/**
* 创建一个向文件中写入字符数据的字符输出流对象
* 如果文件不存在,则自动创建
* 如果文件存在,则会被覆盖
*/
FileWriter writer = null;
try {
writer= new FileWriter("demo.txt",true);
/**
* 调用Writer中的方法
*/
// writer.write("你好,"+LINE_SEPARTOR+"世界");
writer.write("haha");
//刷新
writer.flush();
}catch (IOException e){
e.printStackTrace();
}finally {
try {
if(writer != null){
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭流失败"+e.getMessage());
}
}
}
}
4 FileReader
4.1 FileReader简介
4.2 FileReader构造方法
public FileReader(String fileName)
throws FileNotFoundException
public FileReader(File file)
throws FileNotFoundException
- 读取单个字符,返回值是作为整数读取的字符,在0~65535之间,如果到达末尾,则返回-1
public int read()
throws IOException
package java19;
import java.io.FileReader;
import java.io.IOException;
/**
* 2017/10/12
* 说明:
*/
public class FileReaderDemo {
public static void main(String[] args) {
FileReader fr = null;
try {
fr = new FileReader("demo.txt");
int ch = 0;
while((ch = fr.read()) != -1){
System.out.print((char)ch);
}
}catch (IOException e){
e.printStackTrace();
}finally {
if(fr != null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("流关闭失败"+e.getMessage());
}
}
}
}
}
- 将字符读取数组。返回读取字符的个数,如果已到达末尾,则返回-1
public int read(char[] cbuf)
throws IOException
package java19;
import java.io.FileReader;
import java.io.IOException;
/**
* 2017/10/12
* 说明:
*/
public class FileReaderDemo {
public static void main(String[] args) {
FileReader fr = null;
try {
fr = new FileReader("demo.txt");
char[] chs = new char[1024];
int length = 0;
while((length = fr.read(chs)) != -1){
System.out.print(new String(chs,0,length));
}
}catch (IOException e){
e.printStackTrace();
}finally {
if(fr != null){
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("流关闭失败"+e.getMessage());
}
}
}
}
}
5 练习:文件复制
5.1 文件复制方式一
package java19;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 2017/10/12
* 说明:
*/
public class FileCopy {
public static void main(String[] args) throws IOException {
//创建输入流和输出流
FileReader fr = new FileReader("demo.txt");
FileWriter fw = new FileWriter("test1.txt");
//文件复制
int ch = 0;
while((ch = fr.read()) != -1){
fw.write(ch);
}
//关闭流
fr.close();
fw.close();
}
}
5.2 文件复制方式二
package java19;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 2017/10/12
* 说明:
*/
public class FileCopy {
public static void main(String[] args) throws IOException {
//创建输入流和输出流
FileReader fr = new FileReader("demo.txt");
FileWriter fw = new FileWriter("test2.txt");
//文件复制
char[] buffer = new char[1024];
int len = 0 ;
while((len = fr.read(buffer) )!= -1){
fw.write(buffer,0,len);
}
//关闭流
fr.close();
fw.close();
}
}