我创造了这个下面的方法是我从一个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提示符中的独立命令行应用程序相同?
'File root = new File(“path”);'是否只需要'path'而不是''path''参数? –
修复文件(“路径”)到文件(路径) –