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可執行文件,然後復制,可以還原此文件,可運行。