FILE文件源处理类
FileReader 是读入文本字符文件数据源的类接口。此类管道内包含字节流InputStream管道接口。
FileInputStream 可以读入文本字符文件数据源,也可以读入ASCII码等非文本文件数据源的类接口。
结论:字符流是在字节流基础上的处理流。那么,字节流功能更广泛。字符流无法正确处理例如ASCII的文件数据源。
另外如果都处理文本文件源,如何选择这2个类,使用何种类比较好?就要具体看你实现什么样的功能,分析它们各自不同的方法来决定了。也许一样,也许不同。各自处理的速度和内存使用情况,就要使用一些优化软件来具体分析了。例如:简单软件OptemizeIt, 或Jprobe功能更强的程序优化软件
--------测试FileReader类,阅读可执行ASCII文件--------------
import java.io.*; public class TestFileReader{ public static void main(String[] args)throws IOException{ String st = "appletviewer.exe"; File f = new File(st); FileReader freader = new FileReader(f); FileWriter fwriter = new FileWriter("new"+f.getName()); int in = -1; int flag = 0; in = (char)freader.read(); flag++; System.out.println("my first char reading is :--"+(char)in); // fwriter.write(in); while(in!=-1){ fwriter.write(in); in = freader.read(); flag++; System.out.println("my loop char reading is:--"+(char)in); } System.out.println("the reading flag is:--"+flag); fwriter.flush(); fwriter.close(); freader.close(); } } |
--------测试FileInputStream类,阅读可执行ASCII文件--------------
import java.io.*; public class TestFileInputStream{ public static void main(String[] args)throws IOException{ String st = "appletviewer.exe"; File f = new File(st); FileInputStream fin = new FileInputStream(f); FileOutputStream fout = new FileOutputStream("new"+f.getName()); int in = -1; int flag = 0; in = fin.read(); flag++; System.out.println("my first byte reading is:--"+(char)in); while(in!=-1){ fout.write(in); in = fin.read(); flag++; System.out.println("my loop byte reading is:--"+(char)in); } fout.flush(); fin.close(); fout.close(); System.out.println("the reading flag is:--"+flag); } } |
结果:
FileReader类,读入ASCII可执行文件,然后复制,无法还原此文件,无法运行。
FineInputStream类,读入ASCII可执行文件,然后复制,可以还原此文件,可运行。