728x90
반응형

간단하게 파일 비교 하는 java 소스 공유합니다. 

두개의  텍스트 파일을 비교하는 간단한 코드입니다. 

단점은 원본 파일 대상으로 라인 by 라인으로 비교를 하기 때문에 중간에 비교대상 라인이 다르면 모두 다르게 출력되게 됩니다. ㅠㅠ 

 

소스  파일

package ims;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.TreeMap;

public class FileCompare {

	// 두개 파일 비교
	public static void main(String[] args) throws IOException {
		// String original file = args[0];
		// String compare file = args[1];

		String oldfilename = "D:\\test1.sql";
		String newfilename = "D:\\test2.sql";

		FileCompare comp = new FileCompare();
		String result = comp.compareFile(oldfilename, newfilename);
		if (result.length()>0) {
			String diffFilename =new File(newfilename).getName();
			FileWriter diff = new FileWriter(diffFilename+".error",false);
			System.out.println("file is different");
			System.out.println(String.format("[%s][%s]|[%s] ", "line", "original file", "compare file"));
			System.out.println(result);
			diff.write(result);
			diff.flush();
			diff.close();

		} else {
			System.out.println("file is equal");
			
		}


	}

	public String compareFile(String oldfilename, String newfilename) throws IOException {
		TreeMap<Integer, String> compare = new TreeMap<Integer, String>();
		File oldfile = new File(oldfilename);
		File newfile = new File(newfilename);
		BufferedReader bf = null;
		StringBuffer errorLine = new StringBuffer();
		try {
			bf = new BufferedReader(new FileReader(oldfile));
			int key = 0;
			// old file read
			while (true) {
				String str = bf.readLine();
				if (str == null)
					break;
				compare.put(++key, str);
			}

			bf = new BufferedReader(new FileReader(newfile));
			key = 0;

			// old file vs new file compare

			while (true) {
				String str = bf.readLine();
				if (str == null)
					break;
				if (!str.equals(compare.get(++key))) {
					errorLine.append(String.format("[%d]:[%s]|[%s]\n", key, str, compare.get(key)));
				}

			}

		} catch (IOException E) {
		}
		bf.close();
		return errorLine.toString();
	}

}

 

원본(test1.txt) 비교 대상파일(test2.txt)
DROP TABLE DEPT;
CREATE TABLE DEPT
       (DEPTNO NUMBER(2) ,
DNAME2 VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;
DROP TABLE DEPT;
CREATE TABLE DEPT
       (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;

 

실행결과

file is different
[line][original file]|[compare file] 
[3]:[       (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,]|[       (DEPTNO NUMBER(2) ,]
[4]:[ DNAME VARCHAR2(14) ,]|[ DNAME2 VARCHAR2(14) ,]
728x90
반응형

'03.Program > 02.java' 카테고리의 다른 글

[Java] JDBC 프로그래밍  (0) 2022.04.20
[Java basic-Utility] 디렉토리 파일 리스트 조회  (0) 2022.03.26
Linux OpenJdk 설치  (0) 2022.03.21

+ Recent posts