-1

我试图在两个文件夹中找到同名文件。我在两个数组列表中使用了文件并列出了文件的名称。然后我将两个文件夹中的通用名称文件添加到一个新的数组列表中,并应用差异来查找这些文件是否不同。

因为我只在数组列表中存储了文件名,所以我不能直接对这些文件应用操作。

有人告诉我,通过使用动态数组可以在 Java 中保存文件...

到目前为止,我的代码在一些好朋友的帮助下:

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

public class ListFiles1 
{

    public static void main(String[] args) 
    {

        String path1 = "C:\\Users\\hi\\Downloads\\IIT Typing\\IIT Typing"; 

        String path2 = "C:\\Users\\hi\\Downloads\\IIT Typing\\IIT Typing"; 

        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());
               // System.out.println(f1[i] + " is a file");
            }

        }

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

            if (listOfFiles2[j].isFile()) 
            {
                fileNames2.add(listOfFiles2[j].getName());
            }
        }

    ArrayList<String> commonfiles = new ArrayList<>();
    for (int i = 0; i < listOfFiles1.length; i++)
    {
        for (int j = 0; i < listOfFiles2.length; j++) 
            {
            String tempfilename1;
            String tempfilename2;
            tempfilename1=fileNames1.get(i);
            tempfilename2 = fileNames2.get(j);
            if(tempfilename1.equals(tempfilename2))
                {
                commonfiles.add(tempfilename1);
                System.out.println(commonfiles);
                }
            }
    }            

    }
}
4

3 回答 3

3

与其拥有文件名字符串的 ArrayList,不如拥有文件的 ArrayList

List<File> filesList1 = Arrays.asList(folder1.listFiles());
List<File> filesList2 = Arrays.asList(folder2.listFiles());

然后,当比较它们是否具有相同的名称时,检查它是否是一个文件并且具有相同的名称,然后您将引用 File 对象而不仅仅是名称,这样您就可以读取文件并查看它们是否是相同。

for (File f1 : filesList1)
{
    if(f1.isFile())
    {
        for (File f2 : filesList2) 
        {
            if(f2.isFile() && f1.getName().equals(f2.getName))
            {
                commonfiles.add(f1.getName());
                System.out.println(f1.getName());
            }
        }
    }
}       

不过,这可以通过集合更有效地完成

于 2013-11-04T03:11:22.517 回答
2

我不确定您的问题实际上是什么,但我建议您使用:

Set<String> dir1Files = new HashSet<String>();
Set<String> dir2Files = new HashSet<String>();

// load the sets with the filenames by iterating the File.listFiles() value, and using File.isFile() and File.getName() - just like your existing code

dir1Files.retainAll(dir2Files);

// now dir1Files contains the filenames that are the same in both directories

如果您需要使用文件本身,只需重新创建 File 对象:

File dir1File = new File(folder1, filename);
于 2013-11-04T03:11:44.763 回答
1
import java.io.File;
public class FileNameMatcher 
{
    public static void main(String[] args) 
    {
        File folder1 = new File("C:/Users/pappu/Downloads");
        File folder2 = new File("C:/Users/pappu");
        for(String fileFromFolderOne:folder1.list())
        {
            for(String fileFromFolderTwo:folder2.list())
            {
                if(fileFromFolderOne.equals(fileFromFolderTwo))
                {
                    System.out.println("match found");
                    System.out.println("file name is ===>>>"+fileFromFolderOne);
                }
            }
        }
    }
}
于 2013-11-04T03:17:33.563 回答