-5

我正在尝试从两个文件夹中打印文件的名称,并且此代码可以编译,但在运行它时没有给出任何内容。

这里的主要目标是在两个文件夹中查找通用名称文件,我将文件名存储在两个数组中,然后我将应用排序并找到通用文件。

 package javaapplication13;

    import java.io.File;
    import java.util.*;

    public class ListFiles1 

    {

        public static void main(String[] args) 
        {

            String path1 = "C:/"; 
            String path2 = "D:/"; 

            File folder1 = new File(path1);
            File folder2 = new File(path2);

            String[] f1=folder1.list();

            File[] listOfFiles1 = folder1.listFiles(); 
            File[] listOfFiles2 = folder2.listFiles(); 

            ArrayList<String> fileNames1 = new ArrayList<>();
            ArrayList<String> fileNames2 = new ArrayList<>();

            for (int i = 0; i < listOfFiles1.length; i++) 
            {

                if (listOfFiles1[i].isFile()) 
                {
                    fileNames1.add(listOfFiles1[i].getName());//wow
                    System.out.println(listOfFiles1[i].getName());
                }

            }

            for (int i = 0; i < listOfFiles2.length; i++) 
            {

                if (listOfFiles2[i].isFile()) 
                {
                    fileNames2.add(listOfFiles2[i].getName());//seriously wow
                }
            }

        }
    }
4

2 回答 2

0

这里的主要目标是在两个文件夹中查找通用名称文件,我将文件名存储在两个数组中,然后我将应用排序并找到通用文件。

我不喜欢两个数组的东西。此外,重复文件应该具有相同的长度和相同的名称。如果您真的只需要名称,则可以删除f.length() == temp.length()条件的一部分。

private static void findDups(String dirName1, String dirName2){
    File dir1 = new File(dirName1);
    File dir2 = new File(dirName2);
    Map<String,File> fileMap = new HashMap<String,File>();
    File[] files = dir1.listFiles();
    for(File f : files){
        fileMap.put(f.getName(),f);
    }

    files = dir2.listFiles();
    StringBuilder sb = new StringBuilder(100);

    for(File f : files){
        File temp = fileMap.get(f.getName());
        if(temp != null && f.length() == temp.length()){
            sb.append("Found duplicate files:  ")
              .append(temp.getAbsolutePath())
              .append(" and ")
              .append(f.getAbsolutePath());
            System.out.println(sb);
            sb.delete(0,sb.length());
        }
    }
}
于 2013-10-31T18:49:44.723 回答
0

循环遍历ArrayLists您拥有的两个。每个都ArrayList包含文件名。您将需要一个嵌套循环(循环内的循环)。在嵌套循环的核心,您想要比较each的当前位置ArrayList。您可以.equals()为此使用方法。伪代码类似于:

//create a new ArrayList called "commonNameList"
// loop through fileNames1 with position variable "i"
    //loop through fileNames2 with position variable "j"
        //tempFileName1  = fileNames1.get(i)
        //tempFileName2 = fileNames2.get(j)
        //if tempFileName1  equals tempFileName2
            //commonNameList.add(tempFileName1)

检查这些:

http://mathbits.com/MathBits/Java/Looping/NestedFor.htm

简单的嵌套 for 循环示例

如何比较 Java 中的字符串?

于 2013-10-31T18:51:25.643 回答