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