首页 > 解决方案 > 添加了比我需要的更多的文件

问题描述

添加到我的 ArrayList 似乎创建的元素比我预期的要多 - 添加第二个元素后,文件似乎被重复了。

public void addFileToList(File file) throws IOException {
        if (myList.size() == 0) { //size of my Array
            myList.add(file);
        } else {
            for (ListIterator<File> iterator = myList.listIterator(); iterator.hasNext();) {
                    if (!FileUtils.contentEquals(file, iterator.next())) {//filter files
                        iterator.add(file);//add 8 elements 
                    }
            }
        }
    }

主班

public class Main {
    public static void main(String[] args) throws IOException {
    
    
            Branch br = new Branch("master"); //create Class
            File file1 = new File("/Users/pro/IdeaProjects/MyNewGit/1.txt"); //create Files
            File file2 = new File("/Users/pro/IdeaProjects/MyNewGit/3.txt");
            File file3 = new File("/Users/pro/IdeaProjects/MyNewGit/4.txt");
            File file4 = new File("/Users/pro/IdeaProjects/MyNewGit/6.txt");
    
    
    
            br.addFileToList(file1); //add Files 
            br.addFileToList(file2);
            br.addFileToList(file3);
            br.addFileToList(file4);
        }
        
    }

我添加了 4 个文件,但出现了 8 个文件: ArrayList 的内容

标签: javafileiterator

解决方案


您的逻辑完全错误:

假设您的列表已经包含文件 a、b 和 c。你用文件 d 调用你的方法。

看看你的循环:

for (ListIterator<File> iterator = myList.listIterator(); iterator.hasNext(); ) {
    if (!FileUtils.contentEquals(file, iterator.next())) {//filter files
        iterator.add(file);//add 8 elements 
    }
}

它测试a是否与d不同。是的,所以你加了 d。然后它检查 b 是否与 d 不同。是的,所以你再次添加 d 。然后它检查 c 是否与 d 不同。是的,所以它又加了 d。

您需要测试是否所有文件都与 d 不同。在循环之后,当您知道答案时,您可以添加新文件。


推荐阅读