是否可以在Java中以动态数组的形式存储文件夹的文件

时间:2013-11-04 02:45:47

标签: java arrays arraylist

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

由于我只在Array List中存储了文件名,我无法直接对这些文件进行操作。

有人告诉我,通过使用动态数组,可以用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);
                }
            }
    }            

    }
}

3 个答案:

答案 0 :(得分: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());
            }
        }
    }
}       

这可以通过套装更有效地完成

答案 1 :(得分: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);

答案 2 :(得分: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);
                }
            }
        }
    }
}