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

橙三吉。 提交于 2020-01-05 04:05:21

问题


I have created this following method which I execute from a 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;
}

As long as it looks into the same location as the file itself, it can list all the files. But as soon as I point it to some other location (e.g. C:\somedir) it always returns null. When I run this inside eclipse, it is working fine. I don't assume that it's an issue with the classpath since I have added JAVA_HOME in windows path so it gets picked up (and the javac command also works fine).

I remember that there was a java bug in version 1.4 which was based around the error handling of listFiles method execution. But I am not sure why this is not working when I run it from command line using java command.

you can use the following wrapper to run it

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());
    }

}

EDIT

Okay, I have realised that I used a literal "path" instead of the parameter path and thanks for everyone who pointed this out. But the main problem prevails. The path is not recognised if it is not in the location as the executable class itself. When I try to run this from Eclipse, as a project, it works! But when I try to do it from command prompt using simple command, It doesn't work and #listFiles() always returns null.

java SomeExecItem -C:\myFolder\withclasses

From java.io.File#listFiles() method source analysis, What I understand is that if isInvalid() is evaluated as false when I run it from command line. The only possible reason is that the indexOf('\u0000') is evaluated as -1?

What is the difference here? Since I am not running in admin mode, I suppose Eclipse's view/read permission should be the same as a standalone command line application in cmd prompt?


回答1:


You are not passing the parameter correctly. The try java SomeExecItem "C:\myFolder\withclasses" or java SomeExecItem C:\myFolder\withclasses.




回答2:


Change File root = new File("path"); to File root = new File(path);. This will fix the problem.



来源:https://stackoverflow.com/questions/43831762/java-io-file-listfiles-returns-null-from-windows-cmd-but-not-as-eclipse-proj

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!