我创建了以下方法,我从 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
。