2016-03-03 100 views
0

我有下面的代碼來查找指定目錄中具有特定單詞的文件列表。如何從本地磁盤驅動器讀取文件,如D://或E://或C://

  • isWordPresent(字,文件路徑)方法將給出字是否包含在所定義的路徑。

該代碼工作得很好,直到我們有一些本地驅動器內的文件夾。

如:字符串目錄名= 「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); 
       } 
      } 
     }` 
+3

你有逃避的倒退。它是'「D:\\」'或'「D:/」' –

+0

不,這個rpoblem不是那個@JimGarrison – shwetha

+0

@shwetha:我用你的代碼與directoryName作爲「C://」。它顯示我C盤下的所有文件。你能否讓我更瞭解你的問題。 D://驅動器下有任何文件嗎? – Lathy

回答

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

I已經提到過,File [] roots = File.listRoots();不起作用 – shwetha

+0

發佈File.listRoots()的輸出。我想檢查驅動器列表 – Musaddique

+0

驅動器:C:\ 驅動器:D:\ 驅動器:Q:\ – shwetha

0

創建時使用

File directory = new File(directoryName); 

directoryName需求是一個有效的名稱的新File對象。如果不是directory.listFiles()回報null,你會得到NPE上線C.

在你的問題,你說你試過"*D://*"和其他各種體都在他們通配符(*)。這不是有效的文件/目錄名稱。

您需要提供有效的directoryName(不含通配符)。所以只使用directoryName = "D:\\";應該可以工作。

相關問題