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

问题描述 投票:0回答:2

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

  • 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`

其中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);
                 }
             }
         }`
java string file bufferedreader filereader
2个回答
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循环中,它将逐个列出所有驱动器


0
投票

使用时创建新的File对象

File directory = new File(directoryName);

directoryName需要是一个有效的名字。如果不是directory.listFiles()返回null并且您在C行获得NPE。

在你的问题中,你说你尝试过"*D://*"和其他各种变体,所有变种都带有通配符(*)。这不是有效的文件/目录名称。

您需要提供有效的directoryName(没有通配符)。所以只使用directoryName = "D:\\";应该有效。

© www.soinside.com 2019 - 2024. All rights reserved.