2017-05-07 25 views
1

我創造了這個下面的方法是我從一個main線程中執行java.io.File中#listFiles()返回null從Windows CMD,但不能作爲Eclipse項目運行

public static LinkedList<File> checkFile(String path, LinkedList<File> result) Throws IOException, SecurityException{ 
    File root = new File(path); 
    File[] list = root.listFiles(); 

    if (list == null) 
     return result; 

    for (File f : list) { 
     if (f.isDirectory()) { 
      checkFile(f.getAbsolutePath(), result); 
     } else { 
       result.add(f.getAbsoluteFile()); 
     } 
    } 
    return result; 
} 

只要它看起來成與文件本身位置相同,它可以列出所有文件。但只要我將它指向其他位置(例如C:\ somedir),它總是會返回null。當我在eclipse中運行這個時,它工作正常。我不認爲這是類路徑的問題,因爲我在windows路徑中添加了JAVA_HOME,因此它被拾取(並且javac命令也可以正常工作)。

我記得在版本1.4有一個java錯誤,它基於listFiles方法執行的錯誤處理。但我不知道爲什麼這不起作用,當我從命令行使用java命令運行它。

,你可以用下面的包裝器來運行它

public static void main(String[] args) throws IOException { 

    if (args.length == 0 || args[0] == null){ 
     System.out.println("please specify path to the project's work folder"); 
     return; 
    } 

    String folderPath = (String) args[0]; 
    LinkedList<File> result = new LinkedList<>(); 

    result = checkFile(folderPath, result); 
    long startTime = System.currentTimeMillis(); 
    for (File file : result) { 
     System.out.println(file.getName()); 
    } 

} 

編輯

好吧,我已經意識到我用文字"path"代替參數path並感謝大家誰指出這一點出。但主要問題存在。如果路徑不在可執行類本身的位置,則無法識別該路徑。當我嘗試從Eclipse運行它時,作爲一個項目,它工作正常!但是,當我嘗試使用簡單命令從命令提示符執行此操作時,它不起作用,並且#listFiles()始終返回null。

java SomeExecItem -C:\myFolder\withclasses

java.io.File#listFiles()法源分析,我的理解是,如果isInvalid()判斷爲假,當我從命令行運行它。唯一可能的原因是indexOf('\u0000')評估爲-1?

這裏有什麼不同?由於我沒有以管理員模式運行,我認爲Eclipse的查看/讀取權限應該與cmd提示符中的獨立命令行應用程序相同?

+0

'File root = new File(「path」);'是否只需要'path'而不是''path''參數? –

+0

修復文件(「路徑」)到文件(路徑) –

回答

0

您沒有正確傳遞參數。試試java SomeExecItem "C:\myFolder\withclasses"java SomeExecItem C:\myFolder\withclasses

2

變化File root = new File("path");變爲File root = new File(path);。這將解決問題。

+0

Omg這樣一個愚蠢的語法錯誤:( – ha9u63ar

+0

我已經更新了我的問題,這不是主要問題,謝謝你指出了錯誤。 – ha9u63ar

相關問題