用于查找文件夹中缺少的文件编号的代码

时间:2016-03-21 09:19:55

标签: java file

我需要识别文件夹中缺少的文件编号。

我使用以下代码检索了文件名:

File folder = new File(FILE_PATH);
File[] listOfFiles = folder.listFiles();

for (int i = 0; i < listOfFiles.length; i++) {
    if (listOfFiles[i].isFile()) {
        System.out.println("File " + listOfFiles[i].getName());
    } else if (listOfFiles[i].isDirectory()) {
        System.out.println("Directory " + listOfFiles[i].getName());
    }
 }

但是现在检索后我需要找到哪个文件编号是1-1976的文件范围中都缺少的。

2 个答案:

答案 0 :(得分:2)

如果您只需要文件名,则可以使用list()方法。使用此方法获取所有文件名后,您只需检查指定文件名的存在,例如:

File parent = ...
String prefix = "xxx_", suffix = ".txt"; // for example

Set<String> files = new HashSet<>(Arrays.asList(parent.list()));

// or, as suggested by @JulienLopez:

String pattern = Pattern.quote(prefix) + "\\d+" + Pattern.quote(suffix);
Set<String> files = new HashSet<>(Arrays.asList(parent.list((dir, file) -> file.matches(pattern))));

for (int i = 1; i <= 1976; ++i) { // actually constant should be used
    if (!files.contains(prefix + i + suffix)) {
        System.out.format("File #%d doesn't exist%n", i);
    }
}

但是如果你真的需要检查,例如,该文件不是该目录,还有一种方法可以做,只需为每个File创建i并检查它的存在:

for (int i = 1; i <= 1976; ++i) {
    File file = new File(parent, prefix + i + suffix);

    if (!file.isFile()) {
        System.out.format("File #%d doesn't exist or is directory%n", i);
    }
}

答案 1 :(得分:-1)

我不确定您的文件名的结构,以及您对#34;两者的确切含义&#34;。这是我的想法,我希望对你有所帮助。

String FILE_PREFIX= "your_file_prefix"; // Your file prefix. If your file is "logfile_on_20160121_0001" then the prefix is "logfile_on_20160121_"
int RANGE_MIN = 1;
int RANGE_MAX = 1976;
int fileList[] = new int[RANGE_MAX];
int directoryList[] = new int[RANGE_MAX];

// Quote your code with a bit modify from me
File folder = new File(FILE_PATH);
File[] listOfFiles = folder.listFiles();
    for (int i = 0; i < listOfFiles.length; i++) {
      if (listOfFiles[i].isFile()) {
        System.out.println("File " + listOfFiles[i].getName());
        // Added started
        String tempSplitedName[] = listOfFiles[i].split(FILE_PREFIX);
        if(tempSplitedName.length==2){
            int seq = Integer.parseInt(tempSplitedName[2]);
            if(seq>=RANGE_MIN && seq<=RANGE_MAX){
                fileList[seq] = 1;
            }
        }
        // Added ended
      } else if (listOfFiles[i].isDirectory()) {
        System.out.println("Directory " + listOfFiles[i].getName());
        // Added started
        String tempSplitedName[] = listOfFiles[i].split(FILE_PREFIX);
        if(tempSplitedName.length==2){
            int seq = Integer.parseInt(tempSplitedName[2]);
            if(seq>=RANGE_MIN && seq<=RANGE_MAX){
                directoryList[seq] = 1;
            }
        }
        // Added ended
      }

// Now you count missing files/directory, which is equal 0
for (int i=RANGE_MIN; i<=RANGE_MAX; i++){
    if(fileList[i]==0) System.out.println("Missing file No." + i);
}
for (int i=RANGE_MIN; i<=RANGE_MAX; i++){
    if(directoryList[i]==0) System.out.println("Missing directory No." + i);
}