2012-05-25 2 views
2

char 비교를 통해 char을 사용하는 파일에 어설 션을 원합니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 3 부 라이브러리가 없습니다. 어떤 파일 판독기가 가장 성능이 좋습니까?Java, 어설 션 파일 같음

+1

만이 필요합니다이 파일이 얼마나 큰? 크기가 충분히 작 으면 간단히 메모리에로드하고 'byte []'를 적절한 어설 션 도구와 비교하는 것이 가장 쉬운 방법 일 것입니다. 그것들이 더 커질 수 있다면, 그것은 효과가 없을 것입니다. –

+0

0에서 10000 바이트까지 – Ilya

+2

메모리에 쉽게 들어가야합니다. 주 : 두 파일은 다른 바이트를 가질 수 있지만 정확히 같은 문자를 갖습니다. ;) –

답변

12

제 3 자 라이브러리에 대한 이의 제기가 무엇인지 확실하지 않습니다. 휠을 다시 발명 할 필요가 없습니다.

나는 오픈 소스를 발견했으며 널리 사용되는 apache.commons.io 방법은 FileUtils.contentEquals(file1, file2)입니다. 여기는 javadoc입니다. 당신이 구글 구아바 라이브러리를 사용하는 일이 있다면

+0

이 함수에 대한 Java 7 구현이 있습니까? – Thomas

+0

@ 토마스 - 아니요. Java 7은이 질문이 제기 될 때 거의 1 년 동안 사용되지 않았으며 대답에 따르면 타사 라이브러리가 필요합니다. – amaidment

2

당신은 사용할 수 있습니다

Files.equal(file1, file2); 

docs에서 : 작은 파일의 경우

Returns true if the files contains the same bytes. 
+0

[같음] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/Files.html)이 없습니다. – wener

+0

@wener 고정, '평등'했습니다. – Andrejs

1

(몇 MB까지), I 스트리밍/O는 거의 효과가 없으므로 간단한 일들을 유지할 수 있습니다.

Arrays.equals(Files.readAllBytes(firstFile), Files.readAllBytes(secondFile)); 

다른 인코딩을 사용하려는 경우 의, 당신은 또한 문자로 바이트를 디코딩 할 수 있습니다

boolean equal = new String(Files.readAllBytes(firstFile), firstEncoding).equals(
       new String(Files.readAllBytes(secondFile), secondEncoding)); 

자바 7