我創造了這個下面的方法是我從一個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''參數? –
修復文件(「路徑」)到文件(路徑) –