目录
IO流是用于操作数据的,数据最常见体现形式是:文件。
FileWriter:专门用于写入文件数据的Writer子类对象。
案例
需求:在硬盘上,创建一个文件并写入一些文字数据。
public static void main(String[] args)throws IOException{
// 创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
// 而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将被覆盖。
// 其实该步就是在明确数据要存放的目的地。
FileWriter fw=new FileWriter("demo.txt"); // 写到当前目录下,也可以指定盘符,指定目录
// 调用Write方法,将字符串写入到流中。
fw.write("abcdef");
// 刷新流对象缓冲中的数据
// 将数据刷到目的地中
fw.flush();
fw.write("\r\nghi");
// 关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
// 将数据刷到目的地中
// 和flush区别:flush()刷新后,流可以继续使用,close()刷新后,会将流关闭。
fw.close();
}
注意:
字符流操作flush()和close()方法区别:
flush()刷新后,流可以继续使用,close()刷新后,会将流关闭。
IO异常的处理方式
public static void main(String[] args){
FileWriter fw=null;
try{
// 操作数据的方法都会产生IOException异常
fw=new FileWriter("demo.txt");
fw.write("abefghi");
}catch(IOException e){
System.out.println("catch:"+e.toString());
}finally{
try{
fw.close(); // 关闭字符流close()肯定要被执行,并且也可能产生异常,所以要放到finally{}代码块中,还要再try...catch(){}一下。
}catch(IOException e){
System.out.println("catch:"+e.toString());
}
}
}
注意:
一般的IO操作异常直接try…catch(){}就可以了,但关闭流资源的close()方法是肯定要被执行的,并且也可能产生异常,所以要放到finally{}代码块中,还要再try...catch(){}一下。
对已有文件的数据续写
实现对已有文件的末尾处进行数据续写,只需在初始化FileWriter时,多传入一个boolean类型的变量true:
FileWriter(String fileName, boolean append):根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
示例
public static void main(String[] args)throws IOException{
// 传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。
FileWriter fw =new FileWriter("demo.txt",true);
fw.write("nihao\r\nxiexie");
fw.close();
}