我需要从文件名列表中找到一个文件名,并根据找到的结果启动两种方法。我试过了:
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
)中查找(文件名)。一旦我找到它,我需要停止搜索。如果名称与名称列表不匹配,我只需要在检查该列表中的所有名称后创建一个文件夹一次。
Boolean found = files.contains("XYZ");
这条线有问题。files
是一个File
对象列表,其中没有一个与String
"XYX"
. List.contains()
本质上调用Object.equals()
列表的每个元素,并且File.equals("XYZ")
总是返回false
.
如果您在 Eclipse 这样的 IDE 中编程,它应该在这一行显示警告,因为这是一个可以在编译时检测到的错误。
要确定 aFile
中的 aList<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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句