java - 比较文件(困难的方法)

标签 java file comparator

我快要失去理智了。我想相互比较 4 个文件。

它们分为 2 个文件夹。因此存在包含文件 1-4 的文件夹“A” 并且有文件夹“B”,它是文件夹“A”的副本。

package Aufgabe2;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;



class FTWalker {
    FTWalkerTWO two;

    public static void main(String[] args) throws IOException {
        new FTWalker().walk(args[0]);
    }

    void walk(String pathname) throws IOException {
        File[] files = new File(pathname).listFiles();
        List<Integer> list = new ArrayList<Integer>();
        List<String> liste2 = new ArrayList<String>();  
        int i = 0;


        if (files != null)
            for (File file: files)
                if (file.isDirectory())
                    walk(file.getCanonicalPath());
                else{
                    //      process(file.getCanonicalPath(), (int)file.length());
                    System.out.println(""+file.getName()); //gibt namen aus
                    list.add( (int) file.length());
                    liste2.add(file.getName());
                    i++;
                    duplikat(file,liste2);
                }
        //  sortiert(list);
    }

    void process(String name, int length) {
        System.out.printf("%-70s%9d%n", name, length);
    }

    void sortiert(List<Integer> a) {
        Collections.sort(a);
        for (int k = 0; k < a.size(); k++) {
            System.out.print(a.get(k) + " ");
        }
        System.out.println("");

        Comparator<Integer> comparator = Collections.<Integer> reverseOrder();
        Collections.sort(a, comparator);

        for (int k = 0; k < a.size(); k++) {
            System.out.print(a.get(k) + " ");
        }
    }

    public void duplikat(File file,List<String> a ){//stand vorher List<String> liste2 drin
      //for(int i.)
        if(file.getName().equals(a.get(i)){
            System.out.println("Yo\n");
        }else{
            System.out.println("Sorry seems to be the hardest word\n");
        }

    }
}

上面的代码获取 args[0] 处的文件夹,遍历包含几个文件的目录并打印整个路径+文件的大小。

我只想看看文件名是否相同!

我在两个文件夹中都有 z.txt - 它们是相同的(名称)。然后我将其中之一更改为z2.txt。现在,我检查了两者是否同名。但我没有得到正确的结果。

最佳答案

该代码中有几个问题。

一个简单的解决方案是替换 ListSet然后添加文件名和大小的组合。

其他解决方案是创建一个包含文件名及其大小的对象。这将覆盖 equals() 的实现和 hashode() ,然后使用 HashSet验证是否已找到该类型的文件。

编辑:

由于您只需要检查文件名而没有任何其他限制,因此您可以使用可以存储文件名的 Set 。当您浏览文件系统时,您只需要验证该名称是否已在集合中准备就绪。此外,您需要存储已找到的文件名的数量。要处理这个问题,您可以使用 HashMap,其中键是文件名,值是金额。

if(nameMap.contains(file.getName()) {

  Integer index = nameMap.getValue(file.getName()) + 1;

   //rename file file.renameTo(new File(newPathWithIndex)));

} else {
  nameMap.put(file.getName(), 0);
}

关于java - 比较文件(困难的方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6200273/

相关文章:

java - 两个日期的 WEEK_OF_YEAR 相同

java - 限制文本文件的大小并在java中动态创建一个新文件

c - 在C中的同一循环中读取具有相同行数的多个文件

c++ - 如何使用 C++ 复制目录

java - 如何对 Map<String, List<Summary>> 进行排序

java - 使用 Microsoft Graph SDK for java 将包含元数据的大文件上传到 SharePoint

java - 处理非常大的集合的缓存

java - Java中的2个比较器类

java - 比较方法违反其一般契约异常

java - 如何在Spring boot中设置WebSSOProfileConsumerImpl中的responseSkew属性值