2017-05-07 137 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

相关问题