java.io.File #listFiles() Returns 来自 Windows cmd 的空值,但不是作为 Eclipse 项目 运行

java.io.File #listFiles() Returns null from Windows cmd, but not as Eclipse Project Run

我创建了以下方法,我从 main 线程

执行
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),它总是 returns null。当我 运行 这个 inside eclipse 时,它​​工作正常。我不认为这是 class 路径的问题,因为我在 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 并感谢指出这一点的所有人。但主要问题依然存在。如果路径不在可执行文件 class 本身的位置,则无法识别该路径。当我尝试从 Eclipse 运行 作为一个项目时,它起作用了!但是当我尝试使用简单命令从命令提示符执行此操作时,它不起作用并且 #listFiles() 始终 returns null.

java SomeExecItem -C:\myFolder\withclasses

java.io.File#listFiles()方法源分析,我的理解是,如果isInvalid()在我从命令行运行时被评估为false。唯一可能的原因是 indexOf('\u0000') 被评估为 -1?

这里有什么区别?由于我不是 运行 管理模式,我想 Eclipse 的 view/read 权限应该与 cmd 提示符下的独立命令行应用程序相同?

File root = new File("path"); 更改为 File root = new File(path);。这将解决问题。

您没有正确传递参数。尝试 java SomeExecItem "C:\myFolder\withclasses"java SomeExecItem C:\myFolder\withclasses.