我想读取目录中的所有文件名,除了检查特定文件外,它目前还有效。 这是一个小的统计程序,用于检查“已创建”,“已删除”和“已编辑”的实体文件。
我想搜索实体文件的名称 (例如,如果实体“使用”存在,则“创建”或“编辑”的值将增加1,但是 如果目录中没有具有此名称的实体,则“已删除”值将增加一个。)
我的代码:
package Statistik;
import java.io.File;
import java.util.Arrays;
/**
*
* @author KyoAkashi
*/
public class Statistik {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
File folder = new File("C:\\Users\\Administrator\\Desktop\\Namens Test");
File[] FileNames = folder.listFiles();
for (int i = 0; i < FileNames.length; i++) {
if (FileNames[i].isFile()) {
System.out.println("File " + FileNames[i].getName());
} else if (FileNames[i].isDirectory()) {
System.out.println("Directory " + FileNames[i].getName());
}
}
if(Arrays.asList(FileNames).contains("File 001.txt")){
System.out.println("it exists");
}
else
System.out.println("it doesn't exist");
}
}
修改 从jon skeet requestet:
答案 0 :(得分:2)
Arrays.asList(FileNames)
会返回List
个File
个对象,因此您无法在其中找到String
个。
这就是Arrays.asList(FileNames).contains("File 001.txt")
总是返回false的原因。
您必须创建实际文件名列表才能使.contains("File 001.txt")
正常工作。
您可以使用Java 8 Streams以简洁的方式完成此操作:
Stream.of(FileNames).map(File::getName).anyMatch(s->s.contains("File 001.txt""))
答案 1 :(得分:1)
您正在将File对象与无效的String进行比较,因为Arrays.asList(FileNames)
将返回File对象的列表。可能你想要的是迭代数组并在文件名上做等于:
boolean doesFileExists = false;
for (File file : FileNames) {
if (file.getName().equals("File 001.txt")) {
System.out.println("it exists");
doesFileExists = true;
break;
}
}
if (!doesFileExists) {
System.out.println("it doesn't exist");
}
答案 2 :(得分:0)
您可以使用:
File folder = new File("C:/Users/Administrator/Desktop/Namens Test");
File[] FileNames = folder.listFiles();
for (int i = 0; i < FileNames.length; i++) {
if (FileNames[i].isFile()) {
System.out.println("File " + FileNames[i].getName());
} else if (FileNames[i].isDirectory()) {
System.out.println("Directory " + FileNames[i].getName());
}
}
File file = new File(folder.getPath() + "/File 001.txt");
if (file.exists()) {
System.out.println("it exists");
} else {
System.out.println("it doesn't exist");
}