我需要从文件名列表中查找文件名,并根据找到的结果启动两个方法。我尝试过:
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、ASDF
)中找到XYZ
(文件名)。一旦找到它,我就需要停止搜索。如果名称与名称列表不匹配,我只需在检查该列表中的所有名称后创建一个文件夹一次。
最佳答案
Boolean found = files.contains("XYZ");
这一行有问题。 files
是 File
的列表对象,其中没有一个与 String
匹配"XYX"
。 List.contains()
本质上是调用 Object.equals()
列表中的每个元素,以及 File.equals("XYZ")
将始终返回 false
.
如果您在像 Eclipse 这样的 IDE 中编程,它应该在这一行显示警告,因为这是一个可以在编译时检测到的错误。
确定是否 File
在 List<File>
有一个与给定字符串匹配的文件名,您需要对文件名本身进行操作,因此上面的行应该是:
boolean found = file.getName().equals("XYZ");
根据您想要匹配的具体内容,您可能想要使用 .getName()
, .getAbsolutePath()
,或.toString()
.
使用 Path
也是一个好主意。 Java 7 中引入的 API,而不是 File
,此时它本质上是一个遗留类。
如果您想要一个比手动循环文件寻找匹配项更优雅的解决方案,您可以使用 Files.newDirectoryStream(Path, Filter)
它允许您定义 Filter
仅匹配某些文件的谓词,例如
Files.newDirectoryStream(myDirectory, p -> p.getFileName().toString().equals("XYZ"))
File.list(FilenameFilter)
与 File
的使用类似的功能对象,但同样,更喜欢使用 Path
如果可能的话,API。
关于java - 如何在文件列表中搜索文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42942574/