2014-01-26 65 views
-2

我有一個代碼顯示文件的內容。我試圖用兩種不同的方式來做到這一點。但是,我沒有用第一種方式得到答案,而我用第二種方式得到了答案。我想知道你的答案不是第一種情況? 在第一種情況下,我用一個while循環來檢查我的文件是否不是空的...我沒有得到我的文件的輸出...在第二種情況下,我通過相同的while循環使用函數,我得到結果緩衝閱讀器..不正確的輸出

   line++; 

      } 

l = line; 
     System.out.println("lines are "+ l); 
    String[] text =new String[l]; 

for(i=0;i<l;i++) 
    { 
     text[i]=b.readLine();//Reads a line of text 
     System.out.println("text is "+text[i]); 
     //System.out.print("txt "+ text[i]); 
     } 

     return null; 

} 

    } 

輸出:= 線是4 文本爲null 文本爲null 文本爲null 文本爲null

代碼2--

public class JavaApplication9 { 

    public static void main(String[] args) throws IOException { 
     // TODO code application logic here 
new FileReader(path);ception ex) { 
      Logger.getLogger(ReadMe.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IOException ex) { 
      Logger.getLogger(ReadMe.class.getName()).log(Level.SEVERE, null, ex); 
     } return ln; 
} 

    } 

Output-- 線4 我得到我的文件在這裏

+1

那麼你的問題又是什麼? – unekwu

+0

我想知道你的答案不是第一種情況? – CodeEatingMyMind

+0

請格式化您的難以辨認的代碼。 – EJP

回答

0

好,#1,你已經得到了空,因爲

while((lin=b.readLine())!=null) 
{ 
    line++; 
} 

消耗你的InputStream。當你試過

text[i]=b.readLine(); 

你的讀者已經在文件的末尾,所以沒有什麼可讀的。

對於#2,您聲明瞭兩個FileReader,一個在裏面,另一個在rlh之外。這就是爲什麼它似乎工作。

+0

那麼需要先糾正哪些問題? – CodeEatingMyMind

+0

你應該在for循環之前實例化新的FileReader和BufferedReader。另外,不要忘記關閉這些讀者。如果您使用動態結構而不是數組,則在實際存儲數據之前,您不必知道行數。 – Leo

+0

感謝您的幫助 – CodeEatingMyMind

-1

使用BufferedReader文件讀取正確的方法的內容...

BufferedReader br = new BufferedReader(new FileReader(new File("filepath"))); 
    String s; 
    while((s=br.readLine()) != null){ 
     // process your string like ... 
     System.out.println(s); 
    } 
+0

Doesn'回答兩個項目爲何不同的問題。 – EJP

0

在你的第一個例子您正在閱讀的文件,直到readLine()返回null,這意味着你在文件結尾(EOF),然後你繼續閱讀它,你驚訝readLine()繼續返回null,這意味着你繼續在EOF。不要對此感到驚訝。

在第二個示例中,您打開文件兩次,一次計算行數,一次讀取它們。

這兩個都是不好的做法的例子。而不是一個數組,它讓你知道通知中的行數,你應該使用某種形式的列表來保存行。實際上,你應該真正在做的是一次處理一行文件,而不是將它全部讀入內存,這不會擴展到大文件,並增加了延遲。

+0

感謝您的幫助 – CodeEatingMyMind