-2

diff を使用して 2 つのフォルダーに含まれるファイルを比較する Java コードを作成しました。

Windowsでdiffコマンドを使用するために、diffユーティリティを使用しました。

JFileChooser のことを知り、コードに GUI を追加しようとしています。今私の懸念は、2 つのファイルまたは 2 つのフォルダーを選択したときに diff が機能するように、Java コードをどこに置くべきかということです。

以下はJfileChooserのコードです

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class SimpleFileChooser extends JFrame {

   public SimpleFileChooser() {
    super("File Diffrence Finder");
    setSize(350, 200);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    Container c = getContentPane();
    c.setLayout(new FlowLayout());

    JButton openButton1 = new JButton("Open File 1");
    JButton openButton2 = new JButton("Open File 2");
    JButton dirButton1 = new JButton("Pick Folder 1");
    JButton dirButton2 = new JButton("Pick Folder 2");
    final JLabel statusbar = 
                 new JLabel("Output of your selection will go here");

    // Create a file chooser that opens up as an Open dialog
    openButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        JFileChooser chooser = new JFileChooser();
        chooser.setMultiSelectionEnabled(true);
        int option = chooser.showOpenDialog(SimpleFileChooser.this);
        if (option == JFileChooser.APPROVE_OPTION) {
          File[] sf = chooser.getSelectedFiles();
          String filelist = "nothing";
          if (sf.length > 0) filelist = sf[0].getName();
          for (int i = 1; i < sf.length; i++) {
            filelist += ", " + sf[i].getName();
          }
          statusbar.setText("You chose " + filelist);
        }

      }
    });

    // Create a file chooser that opens up as an Open dialog
    openButton2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        JFileChooser chooser = new JFileChooser();
        chooser.setMultiSelectionEnabled(true);
        int option = chooser.showOpenDialog(SimpleFileChooser.this);
        if (option == JFileChooser.APPROVE_OPTION) {
          File[] sf = chooser.getSelectedFiles();
          String filelist = "nothing";
          if (sf.length > 0) filelist = sf[0].getName();
          for (int i = 1; i < sf.length; i++) {
            filelist += ", " + sf[i].getName();
          }
          statusbar.setText("You chose " + filelist);
        }

      }
    });


    // Create a file chooser that allows you to pick a directory
    // rather than a file
    dirButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int option = chooser.showOpenDialog(SimpleFileChooser.this);
        if (option == JFileChooser.APPROVE_OPTION) {
          statusbar.setText("You opened " + ((chooser.getSelectedFile()!=null)?
                            chooser.getSelectedFile().getName():"nothing"));
        }
        else {
          statusbar.setText("You canceled.");
        }
      }
    });

    // Create a file chooser that allows you to pick a directory
    // rather than a file
    dirButton2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        JFileChooser chooser = new JFileChooser();
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int option = chooser.showOpenDialog(SimpleFileChooser.this);
        if (option == JFileChooser.APPROVE_OPTION) {
          statusbar.setText("You opened " + ((chooser.getSelectedFile()!=null)?
                            chooser.getSelectedFile().getName():"nothing"));
        }
        else {
          statusbar.setText("You canceled.");
        }
      }
    });

    c.add(openButton1);
    c.add(openButton2);
    c.add(dirButton1);
    c.add(dirButton2);
    c.add(statusbar);
  }

  public static void main(String args[]) {
    SimpleFileChooser sfc = new SimpleFileChooser();
    sfc.setVisible(true);
  }
}

差分コード:

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

public class ListFiles
{

    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);

        ArrayList<String> commonfiles = new 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()))
            {
                      System.out.println(diff f1 f2);
            }
        }
    }
} 
}
}
4

1 に答える 1

1
System.out.println(diff f1 f2);

する必要があります

System.out.println("diff f1 f2");

次に、ループを次のように変更します。

for (File f1 : filesList1) {
    if (f1.isFile()) {
        for (File f2 : filesList2) {
            if (f2.isFile() && f1.getName().equals(f2.getName())) {
               //adding same name files here.
                commonfiles.add(f1.getName());
            }
        }
    }
}

ループ印刷後

System.out.println("The common file names are " + commonfiles);

更新しました:

ここで、2 つのファイルが同じかどうかを確認するには、apache commons IO Library を使用します。

アパッチコモンズ IO

contentEquals(ファイル file1, ファイル file2)

コード例:

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class FileCompare {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        File file1 = new File("c:\\test.pdf");
        File file2 = new File("c:\\test1.pdf");     
        boolean equals = FileUtils.contentEquals(file1, file2);
        System.out.println(equals);
    }

}
于 2013-11-04T19:22:11.647 に答える