如何在文件列表中搜索文件名

时间:2017-03-22 04:06:26

标签: java list file

我需要从文件名列表中找到一个文件名,并根据找到的结果启动两个方法。我试过了:

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();
                }
            }
        }

我需要从文件名列表中找到XYZ(文件名)(例如sjh, jsdhf, XYZ, ASDF)。一旦我找到它,我需要停止搜索。如果名称与我在查看该列表中的所有名称后仅创建一个文件夹所需的名称列表不匹配。

3 个答案:

答案 0 :(得分:2)

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

这一行存在问题。 filesFile个对象的列表,其中任何一个都不会与String "XYX"匹配。 List.contains()基本上会对列表中的每个元素调用Object.equals(),而File.equals("XYZ")将始终返回false

如果您在像Eclipse这样的IDE中编程,它应该在此行显示警告,因为它是一个可以在编译时检测到的错误。

要确定File中的List<File>是否具有与给定字符串匹配的文件名,您需要对文件名本身进行操作,因此上述行应改为:

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

根据您要匹配的具体内容,您可能希望使用.getName().getAbsolutePath().toString()

使用Java 7中引入的Path API也是一个好主意,而不是File,此时它本质上是一个遗留类。

如果您想要一个更优雅的解决方案而不是手动循环查找匹配的文件,您可以使用Files.newDirectoryStream(Path, Filter)来定义仅匹配某些文件的Filter谓词,例如

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

File.list(FilenameFilter)是使用File个对象的类似功能,但是,如果可能的话,请再次使用Path API。

答案 1 :(得分: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();
    }
}

答案 2 :(得分:-1)

x_old