我有以下代码来查找指定目录中具有特定单词的文件列表。
代码工作正常,直到我们在本地驱动器中有一些文件夹。
例如:String directoryName =" D:// FOLDER1 "
但是,我无法使用本地驱动器执行相同的操作。以下gace NullPointerException的所有组合在 //代码行C (如代码片段中所示)。
- String directoryName= "*D://*" OR String Directorypath = "*D:/*"
- String directoryName= "*D:\\*" OR String directoryName= "*D:\*"
(" D:\"需要一个转义字符,但是,我已尝试过所有组合)
很明显,我尝试将代码行A 替换为:
`File[] roots = File.listRoots(); //code line A
if(Arrays.asList(roots).toString().contains(directoryName)){ //code line B`
其中字符串directoryName =" C:\" 并因此关闭括号。
上述更改一直有效,直到 //代码行C 显示NullpointerException
我有办法访问D Drive吗?
`public void listFilesHavingTheWord(String directoryName,String word)
throws IOException{
File directory = new File(directoryName);
//get all the files from a directory
File[] fList = directory.listFiles(); //code line A
//code line B
for (File file : fList){ //code line C
if (file.isFile()){
String filepath=file.getAbsolutePath();
if(isWordPresent(word,filepath)){
int index=file.getName().lastIndexOf(".");
if (index > 0) {
String fileNameWithoutExt = file.getName().substring(0, index);
System.out.println("word \""+word+"\" present in file--> "+fileNameWithoutExt);
}
}
} else if (file.isDirectory()){
listFilesHavingTheWord(file.getAbsolutePath(),word);
}
}
}`
答案 0 :(得分:0)
而不是手动提供,您可以使用以下代码用于所有驱动器
File[] roots = File.listRoots();
for(int i = 0; i < roots.length ; i++){
System.out.println("drive: " + roots[i]);
//call listFilesHavingTheWord method here
}
并在此处调用listFilesHavingTheWord
方法并传递参数;
在这个for循环中,它将一个接一个地驱动
答案 1 :(得分:0)
使用
创建新的File
对象时
File directory = new File(directoryName);
directoryName
必须是有效名称。如果不是directory.listFiles()
则返回null
并且您在C行获得NPE。
在您的问题中,您说过您尝试了"*D://*"
以及其他各种变体,其中包含通配符(*
)。这不是有效的文件/目录名称。
您需要提供有效的directoryName
(没有通配符)。所以只使用directoryName = "D:\\";
就可以了。