我有下面的代码来查找指定目录中具有特定单词的文件列表。
代码工作正常,直到我们在本地驱动器中有一些文件夹。
例如: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`
其中String directoryName =“C:\”,因此关闭括号。
上述更改一直有效,直到//代码行C显示NullpointerException
有没有办法可以访问D盘?
`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);
}
}
}`
而不是手动提供,您可以使用以下代码为所有驱动器
File[] roots = File.listRoots();
for(int i = 0; i < roots.length ; i++){
System.out.println("drive: " + roots[i]);
//call listFilesHavingTheWord method here
}
并在此处调用listFilesHavingTheWord
方法并传递参数;
在这个for循环中,它将逐个列出所有驱动器
使用时创建新的File
对象
File directory = new File(directoryName);
directoryName
需要是一个有效的名字。如果不是directory.listFiles()
返回null
并且您在C行获得NPE。
在你的问题中,你说你尝试过"*D://*"
和其他各种变体,所有变种都带有通配符(*
)。这不是有效的文件/目录名称。
您需要提供有效的directoryName
(没有通配符)。所以只使用directoryName = "D:\\";
应该有效。