2015-06-21 17 views
1

我有一個文本文件,其中的內容abcdefgh保存在我的計算機上。我想使用FileInputStream在我的控制檯上顯示字符,同時還要測量完成所需的時間。它看起來像這樣:使用FileInputStream從文件中讀取文本

public class Readtime { 
    public static void main(String args[]) throws Exception{ 
     FileInputStream in=new FileInputStream("bolbol.txt"); 
     while(in.read()!=-1){ 
      long startTime = System.nanoTime(); 
      int x = in.read(); 
      long endtime = System.nanoTime(); 
      System.out.println(endtime-startTime); 
      System.out.println((char)x); 
     } 
     in.close(); 
    } 
} 

什麼我得到的控制檯上如下:

8863 
b 
7464 
d 
6998 
f 
6997 
h 

現在在哪裏字母的休息嗎?就好像只有4個讀操作完成了。我的想法是朝着字符大小的方向發展,並且read()一次只能讀取一個字節,但我沒有得到任何地方。

+0

請出示輸入和預期的輸出。 – Sybren

+0

文本文件的內容被聲明爲abcdefgh。預期的輸出將是從a到h的字母以及讀取每個字母所花費的時間。 –

+1

另外,不要認爲每個字節都是字符。只有使用一些編碼纔是真實的。例如,UTF-8是錯誤的。使用閱讀器閱讀字符。流是用於字節的。 –

回答

5
while(in.read()!=-1){ 
    long startTime = System.nanoTime(); 
    int x=in.read(); 

您正在閱讀在循環while條件和打印數據再次讀取

int i=0; 
while((i=in.read())!=-1){ 
    System.out.println((char)i); 
} 

您可以查看官方文檔here

+0

謝謝澄清。就是這樣。很明顯,歡呼! –

2

變化

while(in.read()!=-1){ 

int x; 
while((x=in.read())!=-1){ 

和刪除

int x=in.read(); 

你讀兩次..和打印備用時間..這就是爲什麼字符缺失

-1

每次in.read();被稱爲文件的下一個字符被讀取。所以你必須在循環迭代中讀取一次字符。

int i=0; 
while((i=in.read())!=-1){ 
System.out.println((char)i); 
i=in.read(); 
} 

如果你看到你的輸出,那麼你會看到,因爲你是在循環中,而狀態讀取兩次,一次表明您已經閱讀替代字符,一次打印。

+0

這段代碼仍然有完全相同的問題。 – EJP

+0

@EJP - 我從問題的代碼中解釋了什麼是錯的。請閱讀完整的答案。 –

0

你可以使用這個它會幫助你

​​