IO流
流按操作数据分为两种:字节流与字符流
流按流向分为:输入流、输出流
字节流的抽象基类:
InputStream
OutputStream
字符流的抽象基类:
Reader
Witer
这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
字符流:写入流Writer
用于操作文件的Writer子类对象,FileWriter,后缀名是父类名,前缀名是该流对象的功能。
创建一个FileWriter对象,该对象一被初始化就必须要有被操作的文件。而且该文件会被创建到指定的目录下。如果该目录下已有同名文件,将被覆盖。
FileWriter fw = new FileWriter(“F:\\test.txt”);
构造方法需要捕捉异IO异常。
调用write方法,将字符串写入流中。
fw.writer(“asdfdsasfdsa”);
刷新流对象中的缓冲中的数据,将数据写到目的地中。
fw.flush();
fw.close();
关闭流资源,关闭之前会刷新一次内部的缓冲中的数据。将数据刷到目的地中。和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。
IO异常的处理方式
FileWriterfw = null;
try{
fw = newFileWriter("D:\\aaa.txt");
fw.write("aaaadfsda");
fw.flush();
}catch(IOExceptione){
System.out.println(e.toString());
}finally{
try{
if(fw!=null)
fw.close();
}catch(IOException e){
System.out.println(e.toString());
}
}
已有文件内容的续写
在FileWriter的构造方法中,加入true参数代表不覆盖已有的文件,并在已有文件的末尾处进行数据的续写。
\r\n
字符流:写入流Reader
FileReader子类,实例化时需指定要读取的文件。
第一种方式:通过字符读取
创建一个文件读取的流对象,和指定名称的文件相关联。要保证该文件是已经存在的,如果不存,会发生异常:FileNotFoundException
FileReader fr = new FileReader(“D:\\test.txt”);
调用读取流对象的read方法。
数据类型 变量名=fr.read();
read():一次只读一个字符,而且会自动往下读。如果已到达流的末尾,则返回-1
while((ch=fr.read())!=-1){
System.out.println(ch);
}
第二种方式:通过字符数组进行读取
定义一个字符数组,用于存储读到字符。该read(char[])返回的是读到字符个数。
FileReader fr = new FileReader(“D:\\test.txt”);
char[] ch = new char[3];
int num=0;
while((num=fr.read(ch))!=-1){
System.out.println(newString(ch,0,num));
}
fr.close();
复制文本文件,从C盘拷贝至D盘。
在D盘创建一个文件,用于存储C盘文件中的数据。
定义读取流和C盘文件关联。
通过不断的读写完成数据存储。
关闭资源
FileReader fr = new FileReader("D:\\aa.txt");
FileWriter fw = new FileWriter("D:\\tmp\\aa_copy.txt");
char[] ch = new char[1024];
int num=0;
while((num = fr.read(ch))!=-1){
fw.write(ch,0,num);
fw.flush();
}
fw.close();
fr.close();