我试图让Java读取目录中的所有文件,并将文件名与字符串列表进行比较,如果文件名与列表中的字符串相同,则应该输出文件名+“ hit”。现在,我只击中一个文件。

该文件夹命中包含:
foto5.jpeg
yH1laMN0s7g.jpeg
RdrzTHAvcQg.jpeg

列表lijst.txt包含:
foto5.jpeg
yH1laMN0s7g.jpeg
RdrzTHAvcQg.jpeg

所以我应该得到:
foto5命中!
RdrzTHAvcQg热门!
yH1laMN0s7g击中!

但是我现在得到的是:
foto5 *
RdrzTHAvcQg热门!
yH1laMN0s7g *

我尝试使用编码,现在是UTF-8。但是我不认为这是问题所在。

 public static void main(String[] args) {
    // TODO Auto-generated method stub
    String hit = ""; // empty string

    File files = new File("C:\\Users\\bram\\Pictures\\hit");
    File[] sourceFiles = files.listFiles();  // the files in the map hit java reads

    List<String> lines = new ArrayList<String>();
    try {
        lines = FileUtils.readLines(new File("C:\\lijst.txt"), "utf-8");
    } catch (IOException e2) {
    }  // java reads strings in the list

    for (File x: sourceFiles) {  // java iterates through all the files in the folder hits.

        String names = x.getName().replaceAll("\\.[^.]*$", "").toString();
        // java gets the filenames and converts them to strings without the extension

        for (String a : lines) // for all strings in the list:
        {
            //System.out.println(a);
            if(names.contentEquals(a))  // if the name is equel to one of the strings in the list it generates a hit
            {
                hit = "Hit!";
            }else {
                hit = "*";              // no hit is *
            }
        }

    System.out.println(x.getName().replaceAll("\\.[^.]*$", "").toString() +"         "+ hit); // print the results

    }

  }

  }

最佳答案

您使事情变得过于复杂。为什么您的txt文件包含图像文件的全名,但是为什么要删除文件扩展名呢?为什么要嵌套for循环?像下面这样的东西还不够吗?

for (File x : sourceFiles) {
        if(lines.contains(x.getName())){
            System.out.println(x.getName()+"\t Hit!");
        }
        else{
            System.out.println(x.getName()+"\t *");
        }
    }

10-02 07:41