這裡是在網上找來的幾個關於 IO流檔案的輸入流具體例項程式碼,接下來試著將其解析得更清楚明白一些,希望初學者看完能有所收穫,這篇這個例子的程式碼是把檔案上的字元一個個連續輸出
方法/步驟
網上找來的例項
import java.io.*;
public class ReadFile
{
public static void readFileByChars(String fileName) {
File file = new File(fileName);
Reader reader = null;
try {
reader = new InputStreamReader(new FileInputStream(file));
int tempchar;
while ((tempchar = reader.read()) != -1) {
if (((char) tempchar) != '\r') {
System.out.print((char) tempchar);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) throws IOException
{
String path="D:\\f.txt";
ReadFile rf=new ReadFile();
rf.readFileByChars(path);
}
}
同時在D盤根目錄新建一個f.txt檔案
內容為:
一二三四五六七八九十零
一二三四五六七八九十零
一二三四五六七八九十零
一二三四五六七八九十零
一二三四五六七八九十零
一二三四五六七八九十零
一二三四五六七八九十零
一二三四五六七八九十零一二三四五六七八九十零一二三四五六七八九十零
接下來我們用eclipse執行程式,執行成功並得到一下結果,讀取是正常的
接著我們分析一下程式的一些語句,先從主函式main(String args[])看起
String path="D:\\f.txt";
這句是定義一個字元變數儲存檔案的路徑
ReadFile rf=new ReadFile();
ReadFile就是程式本身的主類,定義rf呼叫程式的函式
rf.readFileByChars(path);
readFileByChars就是程式定義的一個函式
接下來看函式readFileByChars(String fileName)
File file = new File(fileName);
Reader reader = null;
定義並初始化了讀取檔案需要的變數,File,Reader都是java的類,File類是檔案物件,Reader類是所有字元輸入的父類
try catch (Exception e)
是當發生錯誤時捕捉錯誤的語句
reader = new InputStreamReader(new FileInputStream(file));
Reader類是所有字元輸入的父類,
FileInputStream類就是把檔案按照位元組讀入,
InputStreamReader類就是把讀入的位元組轉化為字元,
語句的意思就是把檔案按照位元組讀入後,再轉成字元,再賦值給reader,
int tempchar;
定義一個整型變數,作為讀取的字元的暫存變數
while ((tempchar = reader.read()) != -1)
while是while迴圈,tempchar是讀取的字元的暫存變數, reader.read()的表示讀取檔案一個字元,並返回這個字元的數值,read()讀到檔案沒有字元可讀時會返回-1
所以條件的意思是讀取檔案字元,並返回給tempchar,直到讀到檔案尾沒有字元時,條件就為false結束迴圈
if (((char) tempchar) != '\r') {
System.out.print((char) tempchar);
}
if是條件判斷,(char) 是強制型別轉換為字元型,((char) tempchar)把字元的值轉換為字元,'\r'是換行字元, System.out.print((char) tempchar);是輸出字元
這個語句的意思是除開'\r'這個字元,其他字元都輸出,
為什麼要遮蔽'\r'呢?原因是windows檔案換行結尾是\n\r這兩字元,讀取檔案時也會一起讀進來,如果這個兩個字元一起輸出或者連續輸出是換一行,但如果分開不連續輸出就是換兩行,遮蔽'\r'是為為了避多出來的行
reader.close();
最後讀完後把字元流關閉了
e.printStackTrace();
是輸出發生錯誤時錯誤
最後我試一下如果不寫 if (((char) tempchar) != '\r')這個判斷語句會怎麼樣,
結果是毫無變化,因為程式是一一個字元連續輸出,\n\r不會出現分開不連續輸出的情況,所以不會有變化。
當然可能在非windows編譯環境會多出一行。