字符流-FileWriter(IO流-Writer)

 

IO包里有很多对象提供使用。这些对象分为两个功能,要么读要么写。

字节流的抽象基类,InputStream (输入流),OutputStream(输出流)。

字符流的抽象基类,Reader(输入流) , Writer(输出流)。

需求:将一些文字存储到硬盘一个文件中。

记住;如果要操作文字数据,建议优先考虑字符流。而且要将数据从内存写到硬盘上,要使用字符流中的输出流,Writer。硬盘的数据基本体现是文件。 所以希望找到一个可以操作文件的Writer。FileWriter是能操作文件的。

FileWriter,用来写入字符文件的便捷类。

1.创建一个可以往文件中写入字符数据的字符输出流对象。既然是往一个文件中写入文字数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地),所以在构造方法中传入文件名。这个时候,如果文件不存在,则会自动创建。 如果文件存在,则会被覆盖。使用时,可能会发生IO异常,可以使用try...catch捕获,也可以throws抛出去。

try {

                     FileWriter fw = new FileWriter("demo.txt");

              } catch (IOException e) {

                     e.printStackTrace();

}

2.调用Writer对象中的write(string)方法,写入数据。这时候运行文件中什么也没有。其实数据写入到临时存储缓冲区中。(把数据写到流里)

fw.write("abcd");

3.到Writer中查找方法,flush() 刷新该流的缓冲。“如果该流已保存缓冲区中各种 write() 方法的所有字符,则立即将它们写入预期目标。”所以就用这个方法。进行刷新,将数据直接写到目的地中。这时候运行,文件中有数据。

fw.flush();

4.再次使用write()和flush(),还是可以把内容输出。

fw.write("effg");

              fw.flush();

5.流在使用的时候会使用Windows的资源,当程序运行结束的时候,需要释放资源,所以要使用close方法关闭资源。close()方法最好写在finally块中。此时发现,fw超出了作用域,所以,将fw的声明提取到try...catch...finally块之外,关闭时需要捕获异常。还有一点需要注意,fw是对象,所以如果它是null的时候,关闭就会出现问题。所以fw在不等于null的时候,才可以进行关闭。这时候运行,即使没有使用flush()方法,文件中也会有内容。我们说一下关闭的方法,“关闭此流,但要先刷新它。”所以close()会使用flush()方法。“在关闭该流之后,再调用 write() 或 flush() 将导致抛出 IOException。关闭以前关闭的流无效。”

if(fw != null){

                            try {

                                   fw.close();

                            } catch (IOException e) {

                                   e.printStackTrace();

                            }

       }

6.在文件后追加内容。在关闭该流之后,再调用 write() 或 flush() 将导致抛出 IOException。

7.在运行的时候,我们发现每次运行,都会重新创建文件,所以,文件中的内容每次都会清空,为了不使文件失去原有的内容,我们可以使用这样的构造方法,添加一个参数,参数值为true,这时候,如果文件不存在,创建文件,文件存在,则在文件中追加内容。

FileWriter fw = new FileWriter("demo.txt"true);

8.到此,将一些文字存储到硬盘一个文件中的功能就写完了。

9.完整代码:

FileWriter fw = null;
		try{
			fw = new FileWriter("demo.txt",true);
			fw.write("abcd");
			fw.flush();
			fw.write("efg");
			fw.flush();
			
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			if(fw != null){
				try{
					fw.close();
				}catch(IOException e){
					e.printStackTrace();
				}
			}
		}

 

 

猜你喜欢

转载自blog.csdn.net/pigziprogrammer/article/details/95183500
今日推荐