2017-09-01 7 views
0

この質問はすでに7年前に尋ねられていますが、[閉じる]ために回答を追加できません。2つのテキストファイルの内容を比較して「同じ内容」または「異なる内容」を返す方法は?

だから、これは問題ではない - これは、ソリューションの提案です:これについて

public class FilesComparator { 
    public static boolean filesEquals(Path f1, Path f2) throws IOException { 
     return Arrays.equals(Files.readAllBytes(f1), Files.readAllBytes(f2)); 
    } 
} 
+1

これは、最初のバイトが異なっていても、両方のBOTHファイルのバイトをすべて読み込みます。短いが不適格 –

+2

回答を追加する場合は、質問を投稿してから回答を回答として投稿する必要があります。 – Sweeper

+4

これは、OP自体で述べられている別の質問に対する回答であるため、この質問を議論の対象外としています。 – SpaceTrucker

答えて

0

方法:Javaの1.7が、これは1つのライナーすることができますので ?

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 

public class FilesComparator { 

    public static boolean isEquals(File f1, File f2) throws IOException { 
     if (f1.length() != f2.length()) { 
      return false; 
     } 

     try (InputStream f1Is = new BufferedInputStream(new FileInputStream(f1)); // or just new FileInputStream(f1) if you don't want to cache some bytes and want to make a native call for each byte 
      InputStream f2Is = new BufferedInputStream(new FileInputStream(f2))) { 

      int f1CurrentByte; 
      int f2CurrentByte; 
      while ((f1CurrentByte = f1Is.read()) != -1 && (f2CurrentByte = f2Is.read()) != -1) { 
       if (f1CurrentByte != f2CurrentByte) { 
        return false; 
       } 
      } 

      return true; 
     } 
    } 

} 
+0

おそらく、既存の質問(リンクされていません)の答えだったでしょう。バイトごとのバイト比較、単純で効率的な – AxelH

+0

FileInputStreamからの非バッファリング、シングルバイト読み込みは決して良い考えではありません。少なくともBufferedInputStreamと妥当なバイト配列を使用してデータのまとまりを読み込みます。そうしないとパフォーマンスはひどくなります。データバッファの等価性は、元の「質問」のようにArrays.equalsでチェックできます。 – Lothar

+0

'BufferedInputStream'を使うだけで充分です。チャンクで読み込む必要はありません。 'BufferedInputStream'は内部的に既にチャンクで読み込みを行います。 –

関連する問題