-1

2 つのフォルダーで同じ名前のファイルを見つけようとしています。File を使用し、2 つの配列リストでファイルの名前をリストしました。次に、2 つのフォルダー内の一般的な名前のファイルを新しい arraylist に追加し、diff を適用して、これらのファイルが異なるかどうかを確認します。

配列リストにファイルの名前しか保存していないため、それらのファイルに直接操作を適用することはできません。

動的配列を使用すると、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());

次に、それらが同じ名前を持っているかどうかを比較するときに、それがファイルであり、同じ名前を持っているかどうかを確認します。次に、名前だけでなくファイルオブジェクトへの参照があるため、ファイルを読み取ってそれらがそうであるかどうかを確認できます同じ。

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 に答える