2017-05-05 65 views
0

我工作在x64 Windows操作系統使用jdk 1.8 x64 我的問題一個NetBeans Java項目是:「讀書目錄的內容(僅文件)與方法file.listfolders()輸出空,如果從我的TextProcessor類實例調用但是,改變。方法static,把它從main()作品完美,所以它沒有任何關係,據我瞭解做權限。只能從main()讀取文件夾/目錄嗎? listfiles()返回null?

private List<String> get_files_paths(String data_path) { 
    File folder = new File(data_path); 
    List<String> full_paths = new ArrayList<String>(); 
    for (final File fileEntry : folder.listFiles()) { 
     if (!fileEntry.isDirectory()) 
      full_paths.add(fileEntry.getAbsolutePath()); 
    } 
    return full_paths; 
} 

在此先感謝。

+0

你的方法不能返回null。請提供[mcve]。 – assylias

+0

感謝您的回覆,我假設您已經嘗試過或者已經有過經驗,並且從未以非靜態方式讀取文件時獲得「null」,但是,我正在變得「無效」,並且我希望有人會遇到了這個問題並找到了解決方案。 – shadespirit

+0

你說它在某些情況下有效,但不在其他情況下 - 但你沒有顯示相應的代碼。問題很可能出現在您未顯示的代碼中。你需要展示一個*完整的例子來重現問題。查看我上面發佈的鏈接。 – assylias

回答

0

下面的代碼工作正常,只要路徑我認爲你的路徑必須是無效的如果目錄不存在,ile :: listFiles將返回空值。

private List<String> get_files_paths(String data_path) { 
    File folder = new File(data_path); 
    if(!folder.exists() || !folder.isDirectory()){ 
     throw new IllegalArgumentException("Invalid directory"); 
    } 
    List<String> full_paths = new ArrayList<>(); 
    for (File fileEntry : folder.listFiles()) { 
     if (fileEntry.isFile()) 
      full_paths.add(fileEntry.getAbsolutePath()); 
    } 
    return full_paths; 
} 
+0

感謝您的回覆,正如我所說的,該方法在「非靜態」上下文中(通過main())工作,它將我在該目錄中的文件與私有文件一起輸出給我,但它給了我一個null指針異常,當它從類的構造函數中被調用以將它追加到列表路徑變量。確切地說,它是folder.listFiles(),它返回一個空指針異常,而不是「get_files_paths()」。 – shadespirit

+0

您可以顯示該NPE在哪條線上拋出? List中的add方法接受空值,所以唯一可能的位置是在folder.listFiles()中。 – Beri

+0

我試着用給定的解決方案,它不會爲變量'p'輸出問題,但是對於'o'它會爲以下測試輸出問題: TextProcessor p = new TextProcessor(「E:\\ TEST」,「E :\\ DIST」,5); TextProcessor o = new TextProcessor(「E:\\ TEST」,「E:\\ Dist」,4);如果(!folder.exists()||!folder.isDirectory()){ 拋出新的IllegalArgumentException(「Invalid directory」); – shadespirit

0

我已經解決了這個問題,但它很奇怪!我之前是這麼做的: - 我通過右鍵單擊文件夾 - >屬性,從我想要獲取文件的位置獲得路徑。粘貼到NetBeans中時,我獲得了「E:\ TEST」。 現在,我執行以下操作: -I在NetBeans IDE中使用鍵盤將值寫入,如下所示:「E:\ TEST」(相同) 並且它可以工作!我真的不知道爲什麼會發生這種情況?!