2012-10-27 232 views
0

我有一個更復雜的程序,涉及使用文本文件中寫入的內容,但它根本不工作,沒有顯示任何內容,並且所有內容都取決於文件。如果我只是讓字符串等於我的代碼中的某些東西,並擺脫閱讀從文件然後它的作品。我嘗試了一些簡單的操作,比如顯示被讀取的行,但是當我運行它時不顯示任何內容。無法從文件讀取

編輯:它無法找到文件的路徑...通常默認文件在哪裏?該文件與程序位於同一目錄中,但無法找到它,爲什麼?

public static void main(String[] args) { 
    String s; 
     try { 
      FileReader fstream=new FileReader("input.txt"); 
      BufferedReader in=new BufferedReader(fstream); 

     while((s=in.readLine())!=null){ 
     System.out.print(s); 


     }}catch(IOException e){ 
      System.exit(0); 
     } 
    } 
} 
+0

編輯:它無法找到該文件的路徑...通常默認文件在哪裏?該文件與程序位於同一目錄中,但無法找到它,爲什麼? – BubbleTree

+0

當我通過C:\\ etc \\ etc \ workspace \ Project \\ src \\ input.txt指定路徑位置時,它可以工作,但是當我輸入input.txt時,它沒有找到它 – BubbleTree

回答

3

不要忽略異常。如果沒有讀取,可能是拋出異常。不要讓它冒泡,告訴你什麼是錯的,你會抓住它並默默退出。這就像購買火警並將其音量設置爲0:你永遠不會知道有火災。

變換你的程序

public static void main(String[] args) throws IOException { 
    String s; 
    FileReader fstream=new FileReader("input.txt"); 
    BufferedReader in=new BufferedReader(fstream); 

    while((s=in.readLine()) != null) { 
     System.out.print(s); 
    } 
} 

,看看會發生什麼。

此外,我刪除了循環內調用readLine()。這一行已經被閱讀了。

+0

我扔在ioexception在頂部,它表示無法找到文件路徑,儘管它與程序位於同一目錄中。 – BubbleTree

+0

當我通過C:\\ etc \\ etc \ workspace \ Project \\ src \\ input.txt指定路徑位置時,它可以工作,但是當我輸入input.txt時,它找不到它。 – BubbleTree

+0

input.txt是一個相對於java啓動目錄的路徑。這與您的課程目錄無關。 –

1

你進行雙讀取

while((s=in.readLine())!=null){ 
    s=in.readLine(); 

您在while條件中讀取行,然後嘗試後,立即讀取另一行,大概是碰到文件

嘗試刪除結束第二個in.readLine()語句

0

您每次循環重複時都讀兩行。刪除循環中包含的

s=in.readLine(); 

0

正如其他人所提到的,您錯誤地以兩倍的檢查率讀取行。他們的解決方案解決了問題的根源。

然而,如果內存是不是一個問題,你正在使用Java 7,你可能有興趣在Files.readAllLines

List<String> lines = Files.readAllLines(path, Charset.defaultCharset()); 

從文檔:

從文件中讀取所有行。此方法確保在讀取所有字節或引發I/O錯誤或其他運行時異常時關閉文件 。使用指定的字符集將文件中的字節解碼爲字符 ...請注意,此方法適用於便於在單個操作中讀取所有行的簡單情況。 它不適用於閱讀大文件

使用此方法的好處是,它可以抽象出詳細信息,爲您處理關閉文件並且通常更易於使用。