Java IO流 FileOutputStream类 和 FileInputStream类 FileReader类和FileWriter类
转自:http://blog.csdn.net/tianzhw/article/details/6117692
FileOutputStream类和FileInputStream类,他们的父类分别是OutputStream类和InputStream类。
FileOutputStream类FileInputStream类都没有子类了。它们的父类都是抽象类不能实例化。
所以FileOutputStream类和FileInputStream类,就是其父类最直接的实现。
FileInputStream类在创建的时候有2个构造方法,
一个直接指定输入流的IO设备的路径,或者是指定一个File类对象。
并且指定路径或者File对象必须是存在并且没有别其他IO输入或输出流打开的。
下面是这2个类的一个小例子:特别注意的代码中的close方法上面的注释有错误,刷先的方法调用是在write方法调用的。这一点区别字符流里面。
1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 public class FileStream { 4 /** 5 * @param args 6 * @throws FileNotFoundException 7 */ 8 public static void main(String[] args) throws Exception { 9 // TODO Auto-generated method stub 10 FileOutputStream outputStream = new FileOutputStream("file.txt"); 11 outputStream.write("www.tianzhw.com".getBytes());// 因为是字节流,所以只能是一次写入一个字节。 12 /* 13 * 一般具有flush方法的输出流,其内部都是有缓存区实现的。 14 * 其原因就是每次都操作硬盘对cup的使用率太大, 15 * 通过缓存区的实现就可以降低了cup的使用率。 16 */ 17 outputStream.flush(); 18 /** 19 * close方法一般在实现中,都会调用flush 方法。 20 */ 21 outputStream.close(); 22 byte[] b = new byte[1024]; 23 FileInputStream in = new FileInputStream("file.txt"); 24 int i = in.read(b);//方法的返回的数字,就是读出了多少个字节 25 System.out.println(new String(b, 0, i));// 这里读取也是一个字节后然后给你转化成字符串输出 26 in.close(); 27 } 28 }
同上面一样,FileReader类和FileWriter类 也是Reader类和Writer类的子类。
但是他是字符流了。可以直接操作字符或者直接操作文本。
我们这里要注意的FileWriter的write方法内部没有调用flush方法,需要我们自己调用。
1 import java.io.FileNotFoundException;
2 import java.io.FileReader;
3 import java.io.FileWriter;
4 import java.io.IOException;
5 public class FileStream2 {
6 public static void main(String[] args) throws Exception {
7 WriterAndReader();
8 }
9 private static void WriterAndReader() throws IOException,
10 FileNotFoundException {
11 FileWriter writer = new FileWriter("file2.txt");
12 writer.write("您好 中国");
13 writer.flush();
14 writer.close();
15 char[] chr = new char[1024];
16 FileReader reader = new FileReader("file2.txt");
17 int i = reader.read(chr);
18 System.out.println(new String(chr, 0, i));
19 reader.close();
20 }
21 }
/**
FileReader、FileWriter分别是对文本文件的读写使用的封装了一些字符集操作。
FileInputStream/FileOutputStream是集成InputStream/OutputStream的文件读写流,用于读写任何文件,
可以作为构造其他InputStream/OutputStream的基础
**/
【签名→→→】【****知其然知其所以然****】
工具只能帮助我们解决我们认识到的问题,解决不了我们都没理解的问题。
不能再把一切扔给框架、容器、工具!
首先理解你的业务逻辑,理解你要实现的功能,
然后搞清楚框架、容器、工具会帮助我们做什么。
只有理解了自己的业务逻辑,理解了自己的代码,理解了自己要用到的第三方代码,
才能真正完美地实现我们需要的功能!