java.io.file #listfiles()从Windows CMD返回null,但不会以Eclipse Proj



我创建了以下方法,我从 main thread

执行该方法
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内部运行此操作时,它可以正常工作。我不认为这是ClassPath的问题,因为我在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(作为一个项目(运行它时,它可以工作!但是,当我尝试使用Simple Command从命令提示符执行此操作时,它不起作用,#listFiles()总是返回null。

java SomeExecItem -C:myFolderwithclasses

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

这里有什么区别?由于我没有在管理模式下运行,因此我想Eclipse的视图/读取权限应与CMD提示中的独立命令行应用程序相同?

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

您未正确传递参数。尝试java SomeExecItem "C:myFolderwithclasses"java SomeExecItem C:myFolderwithclasses

最新更新