java讀取文件:文本文件
一般使用串行方式讀出或者寫入文件。總的來說,使用輸入流把文件內容讀入內存,使用輸出流把內存中的信息寫出到文件。這些類位於java.io包下。
輸入和輸出的類和方法往往是對應的
文本文件
先了解如何讀寫文本文件,然後看如何讀寫二進制文件。jaVa.ioReader用來讀取字符,它的子類FileReader用來讀取文本文件。
FileReader打開指定路徑下的文件。文件的路徑分隔符可以用“\\”或者“/”表示。
“\\”是Windows風格的寫法,因為字符串中的特殊字符要轉義,所以用兩個斜線表示一個斜線。
FileReader fr = newFileReader ("c: Wautoexec.bat"); //打幵文本文件
“/”是Linux風格的路徑寫法,因為不需要轉義,所以正斜線只需要寫一個就可以了。
FileReader fr = new FileReader ("c:/autoexec.bat"); //打開文本文件
如果有一堆磚要搬,一次取不完,不會一次只拿一塊磚,會盡量多拿幾塊。如果有很多內
容要讀,不會一次只讀一個字節,而是一次盡量多讀一些字節到緩存。
FileReader fr = new FileReader ("c:/autoexec.bat"); //打開文本文件
BufferedReader br = new BufferedReader (fr); //緩存讀
while ((line = br .readLine ()) != null) { //按行讀入文件
System.out.println(line);
}
fr.close(); //關閉文本文件
輸入流把數據從硬盤讀入隨機訪問存儲器(Random Access Memory,簡稱RAM)。可以
根據輸入流構建BufferedReader,實現代碼如下所示。
String fileName = "SDIC.txt"; //文件名 InputStream file = new FilelnputStream (new File (fileName)); //打開輸入流 //緩存讀入數據 BufferedReader in = new BufferedReader(new InputStreamReader(file,"GBK"));
for循環按行讀入一個文件
String fileName = "SDIC.txt"; //文件名 InputStream file = new FilelnputStream (new File (fileName));"打開輸入流 //緩存讀入數據 BufferedReader in = new BufferedReader(new InputStreamReader(file,"GBK")); String line = in.readLine(); while (line != null) { System.out.println (line); line = in.readLine(); } in.close ();
一般來說,Writer是把內容立即寫到硬盤。如果要多次調用write方法,則批量寫入效率會
更高。類似於團購,團購的價格往往比單件購買的價格低。可以使用緩存加快文件寫入速度。
//使用缺省的緩存大小 BufferedWriter bw - new BufferedWriter(new FileWriter(fileName)); bw.write (”Hello,China!"); //寫入一個字符串 bw.write (”\n”); //寫入換行符 bw.write("Hello,World!"); bw.close(); //把緩存中的內容寫入文件
使用BufferedWriter寫入數據時,最後需要調用BufferedWriter的close方法。如果不關閉
文件,可能導致緩存中的數據丟失,寫入文件的數據不完整。
按指定編碼寫入文本的完整代碼如下所示。
/* * 向文件寫入字符串 * * @param content 字符串 * * @param fileName 文件名 * * @param encoding 編碼 */ public static void writeToFile(String content, String fileName, String encoding) { try { FileOutputStream fos = new File0utputStream(fileName); OutputStreamWriter osw = new OutputStreamWriter(fos, encoding); BufferedWriter bw = new BufferedWriter(osw); bw.write(content); bw.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
如果黑板上已經有字,可以選擇抹去黑板上已有的字重新寫,也可以在原來的文字後繼續
寫。如果一個文件已經存在,可以把新的內容追加寫到最後,也可以從頭寫入新內容,也就是
覆蓋寫。FileWriter的構造方法區別於這兩種寫入方式。
//FileWriter 構造方法 . FileWriter( String fileName, boolean mode) throws IOException
其中的mode = false表示覆蓋寫,mode = true表示追加寫。為了避免沖突,在一個時刻只
能有一個線程寫文件。
java讀取文件:文本文件