2017-03-22 61 views
0

我需要從文件名列表中找到文件名,並根據找到的結果啓動兩種方法。我想:如何在文件列表中搜索文件名

FileList result = service.files().list() 
      .setPageSize(10) 
      .setFields("nextPageToken, files(id, name)") 
      .execute(); 
     List<File> files = result.getFiles(); 
     if (files == null || files.size() == 0) { 
      System.out.println("No files found."); 
     } else { 
      System.out.println("Files:"); 
      for (File file : files) { 
       System.out.printf("%s (%s)\n", file.getName(), file.getId()); 
       Boolean found = files.contains("XYZ"); 
       if(found) 
       { 
        insertIntoFolder(); 
       } else { 
        createFolder(); 
       } 
      } 
     } 

我需要找到的文件名列表(如sjh, jsdhf, XYZ, ASDFXYZ(文件名)。一旦我找到了它,我需要停止搜索。如果名稱與名稱列表不匹配,我需要在檢查該列表中的所有名稱後僅創建一次文件夾。

回答

2
Boolean found = files.contains("XYZ"); 

這條線是有問題的。 filesFile對象,其中沒有將匹配String"XYX"的列表。 List.contains()本質上在列表的每個元素上調用Object.equals(),並且File.equals("XYZ")將總是返回false

如果您在像Eclipse這樣的IDE中進行編程,它應該在這一行上顯示警告,因爲它是一個可以在編譯時檢測到的錯誤。

要確定是否在List<File>一個File有一個文件名匹配,你需要在文件名本身操作給定的字符串,因此,上述行應改爲:

boolean found = file.getName().equals("XYZ"); 

這依賴於你在做什麼試圖匹配您可能需要使用.getName().getAbsolutePath(),或.toString()


這也是使用Path API在Java 7中引入的,而不是File,基本上是在這一點上遺留類是一個好主意。

如果您想要一個比手動循環查找匹配文件更優雅的解決方案,您可以使用Files.newDirectoryStream(Path, Filter),它允許您定義僅匹配某些文件的Filter謂詞。

Files.newDirectoryStream(myDirectory, p -> p.getFileName().toString().equals("XYZ")) 

File.list(FilenameFilter)是與File對象時類似的功能,但同樣,如果喜歡可以使用Path API。

0

這裏有一個例子:

/** 
* return true if file is in filesList else return false 
*/ 
static boolean isFileInList(File file, List<File> filesList) { 
    for(File f: filesList) { 
     if (f.equals(file)) { 
      return true; 
     } 
    } 
    return false; 
} 
public static void main(String[] args) { 
    List<File> files;// the filelist; make sure assign these two variable. 
    File file; // the file you want to test. 
    if (isFileInList(file, files)) { 
     //file is presented 
    } else { 
     //file is not presented 
     createFolder(); 
    } 
} 
+0

謝謝verymuch –

-1
package test; 

import java.io.File; 
import java.io.FilenameFilter; 
import java.io.IOException; 

public class DirectoryContents { 

public static void main(String[] args) throws IOException { 

    File f = new File("."); // current directory 

    FilenameFilter textFilter = new FilenameFilter() { 
     public boolean accept(File dir, String name) { 
      String lowercaseName = name.toLowerCase(); 
      if (lowercaseName.endsWith(".txt")) { 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }; 

    File[] files = f.listFiles(textFilter); 
    for (File file : files) { 
     if (file.isDirectory()) { 
      System.out.print("directory:"); 
     } else { 
      System.out.print("  file:"); 
     } 
     System.out.println(file.getCanonicalPath()); 
    } 

} 

} 
+0

請問這個以任何方式回答這個問題?你沒有提供任何解釋或指導,而且這些代碼基本上與OP所詢問的無關。 「*我需要從文件名列表中找到XYZ(文件名)(如SJH,jsdhf,XYZ,ASDF),一旦我找到了我需要停止搜索*解釋如何使用'FilenameFilter'會一個合理的答案,但這只是一塊代碼。 – dimo414

+0

感謝您的回答 –