2017-03-08 18 views
0

我想要立刻掌握流和套接字,所以我想爲早期測試做的只是從普通的txt文件中讀取行。通過相對路徑創建文件不能與IDE協同工作

我第一設置它通過的IntelliJ IDE和代碼如下,

package NixWichtiges; 

import java.io.*; 

/** 
* Created by Wolfone on 08.03.2017. 
*/ 
public class StreamReadTest { 
    public static void main(String[] args) { 
     BufferedReader bufferedReader = null; 
     try { 
      bufferedReader = new BufferedReader(new FileReader(new File("test.txt"))); 
      String message; 
      while ((message = bufferedReader.readLine()) != null){ 
       System.out.println(message); 
      } 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }finally { 
      try { 
       bufferedReader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

中的test.txt位於其中StreamReadTest.java位於同一文件夾和我檢查它是包含在通過在IntelliJ中執行「運行」而創建的編譯輸出的相應路徑中。但我不斷收到fileNotFoundException。

我更加困惑的事實是,當我在我的另一臺計算機上通過commandline-comilation和execution執行它時,它工作得很好(使用此測試的默認包)。

有人可以解釋發生了什麼問題嗎? 在此先感謝您的任何意見。

最良好的祝願 Wolfone

+2

除非你使用特定的路徑,在上下文中的文件必須在路徑從哪裏調用JVM。 –

+2

idea從根項目目錄運行項目,所以在你的情況下,你應該把'new File(「test.txt」)''改成'new File(「src/main/java/NixWichtiges/test.txt」)'文件到根項目目錄 –

+0

啊,好吧,我認爲它會是這樣的雷迪,但我沒有想到這個想法會從一個不同的位置運行整個事情的可能性比我所使用的主要類,所以謝謝Slava對你的回答。解決了我的問題:) – Wolfone

回答

1

這有什麼好做的IntelliJ用 - 你有同樣的問題,無論你如何運行這個程序。您已經引用了一個沒有路徑的文件,這意味着它將在您啓動運行代碼的jvm所在的目錄中找到。嘗試使用絕對路徑,這應該解決它。或者,瞭解類路徑資源,這是查找文件的首選方式。而且,即使這樣的小程序也應該使用maven構建(這非常簡單)。

最後,你不應該在你的源代碼目錄(src/main/java)中有這個文件。它應該位於資源目​​錄(src/main/resources)中。

要確認您正在運行的目錄,你可以創建一個文件,看看它的絕對路徑,喜歡的東西:

System.out.println(new File("").getAbsolutePath()); 
+0

感謝您的輸入!我對Maven瞭解得不多,我對Ant有一點了解;從中我明白這兩個都是構建工具。對不起後續問題,但現在你提到它:在選擇使用哪一個時,我有什麼重大差異? – Wolfone

+0

沒有選擇。使用maven。還有第三個選項:Gradle,但是再次沒有選擇:使用maven。 Maven很容易入門,但是你必須忍受一點點xml才能開始(https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Minimal_POM )。把xml放到你項目根目錄下的一個名爲pom.xml的文件中,然後關閉你的項目並刪除.idea文件夾,然後'打開'pom-idea將從那裏接管。 –

+0

好的,說實話,看起來很嚴謹,但知道更多不同的東西不會傷害大部分時間,所以感謝鏈接:) – Wolfone