如下图所示,现有一个人脸表情数据集RAF-DB,其train文件中的每一个图片的文件名称为“train_00001_aligned.jpg”
另外,有train_list.txt文件标记了上图文件夹每一张数据图片所对应的标签,如下图所示,其每一张图片及对应的标签表示为“train_00000.jpg 5”
现在问题来了,需要比较train文件夹中的每一张图片和train_list.txt文件中的每一行所标记的名字是否相一致,如果不一致的则需要修改,其功能使用java代码实现如下:
package com.cskaoyan.object.api;
import java.io.*;
import java.util.Arrays;
public class Demo4Other {
public static void main(String[] args) throws IOException {
//打开存放数据集的文件夹,并读取每一个图片的文件名,存放在str_picture中
File file = new File("C:\\Users\\蝙蝠侠\\Desktop\\2000\\文件夹里面的才可以\\RAF\\train");
String str_picture[] = file.list();
System.out.println(Arrays.toString(str_picture));
//去掉数据集文件中第一个配置文件
for(int i=0;i<str_picture.length-1;i++) {
str_picture[i] = str_picture[i+1];
}
System.out.println(Arrays.toString(str_picture));
//把每一个图片名由“train_00001_aligned.jpg”改成“train_00001.jpg”
for(int i=0;i<str_picture.length-1;i++) {
String str = str_picture[i].replace("_aligned.",".");
str_picture[i] = str;
}
System.out.println(Arrays.toString(str_picture));
//打开并读取存放数据集名称以及对应标签的txt文件train_list.txt,并把每一行的数据存放在str_txt中
File filetxt = new File("C:\\Users\\蝙蝠侠\\Desktop\\2000\\文件夹里面的才可以\\RAF\\train_list.txt");
FileInputStream input = new FileInputStream(filetxt);
BufferedReader fis=new BufferedReader(new InputStreamReader(input));
String[] str_txt = new String[str_picture.length];
String s;
int i=0;
while(( s = fis.readLine())!=null) {
str_txt[i] = s;
i++;
}
//把“train_00000.jpg 5”变成“train_00000.jpg”,即把图片对应的标签去掉
int last = str_txt[0].indexOf(" ",0);
String[] str_txt_new = new String[str_picture.length];
for(int k=0;k<str_picture.length-1;k++) {
str_txt_new[k] = str_txt[k].substring(0,last);
}
//判断数据集文件名称和txt文件中对应的名字是否相吻合,即比较str_picture和str_txt_new,二者不一致的输出,一致的就不用输出
System.out.println("———————华丽的分割线———————");
for(int m = 0;m<str_picture.length-1;m++) {
int result = str_picture[m].compareTo(str_txt_new[m]);
if(result!=0) {
System.out.println(str_picture[m]+"和"+str_txt_new[m]+"不一样");
}
}
}
}