如何从本地磁盘驱动器读取文件,如D://或E://或C://

时间:2016-03-03 07:08:18

标签: java string file bufferedreader filereader

我有以下代码来查找指定目录中具有特定单词的文件列表。

  • isWordPresent(word,filepath)方法将判断该单词是否包含在定义的路径中。

代码工作正常,直到我们在本地驱动器中有一些文件夹。

例如: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);
                 }
             }
         }`

2 个答案:

答案 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:\\";就可以了。