ArrayList <file>包含文件名</file>

时间:2013-02-19 07:17:07

标签: android arraylist contains

我有一个ArrayList(上面代码中的File)的问题。这个arraylist由位于sd中的文件组成。问题是我可以有重复(相同的图像,但在不同的路径进入SD,所以相同的文件名但不同的路径),我想删除它们。所以我使用这段代码:

ArrayList<File> removedDuplicates = new ArrayList<File>();

for (int i = 0; i < File.size(); i++) {
    if (!removedDuplicates.contains(File.get(i))) {
        removedDuplicates.add(File.get(i));
    }
}

但它不起作用,我猜因为文件列表的contains()查看文件路径而不是文件名。这是真的吗?我怎样才能解决我的问题?我也尝试过:

ArrayList<File> removedDuplicates = new ArrayList<File>();

for (int i = 0; i < File.size(); i++) {
    if (!removedDuplicates.contains(File.get(i).getName())) {
        removedDuplicates.add(File.get(i));
    }
}

但仍然不起作用。感谢

3 个答案:

答案 0 :(得分:2)

getName的类型是String,而ArrayList中的对象类型是File,所以你永远不会得到同样的东西。

您想要比较ArrayList中的名称。

for(File f : files){
    String fName = f.getName();
    boolean found = false;
    for(File f2 : removedDuplicates){
       if(f2.getName().equals(fName)){
           found = true;
           break;
       }
    }
    if(!found){
        removedDuplicates.add(f);
    }
}

答案 1 :(得分:1)

非常简单。 PS:经过测试的代码

Map<String, File> removedDuplicatesMap = new HashMap<String, File>();
    for (int i = 0; i < files.size(); i++) {
        String filePath = files.get(i).getAbsolutePath();
        String filename = filePath.substring(filePath.lastIndexOf(System
                .getProperty("file.separator")));
        removedDuplicatesMap.put(filename, files.get(i));
    }
    ArrayList<File> removedDuplicates = new ArrayList<File>(
            removedDuplicatesMap.values());

答案 2 :(得分:0)

试试这个:

ArrayList<File> removedDuplicates = new ArrayList<File>();

File temp;   
for (int i = 0; i < File.size(); i++) {
   temp=new File(File.get(i).getAbsolutePath());   
   if (!removedDuplicates.contains(temp)) {
         removedDuplicates.add(File.get(i));
   }
}