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
728x90
반응형

디렉토리내 파일이 존재 하는지 확인하는 java 코드입니다 .

디렉토리를 조회후 파일이 있는지 확인하고 디렉토리내 또 다른 디렉토리가 존재 한다면 재귀 함수 호출을 통해 

하위 파일 까지 출력 하는 코드 입니다. 

Oracle 샘플 스키마 스크립트를 가지고 테스트해보겠습니다. 

 

import java.io.File;
import java.io.IOException;
import java.security.AccessControlException;
import java.sql.SQLException;
import java.util.ArrayList;

public class DirectoryFileList {

	public static void main(String[] args)
			throws AccessControlException, SQLException, ClassNotFoundException, IOException {

		String path = "D:\\998.Tmp\\db-sample-schemas-19.2\\db-sample-schemas-19.2";

		ArrayList al = new ArrayList<String>();
		subDirList(path, al);

	}

	public static void subDirList(String source, ArrayList<String> list) {

		File dir = new File(source);
		File[] fileList = dir.listFiles();

		try {

			for (int i = 0; i < fileList.length; i++) {

				File file = fileList[i];

				if (file.isFile()) {

					// 파일이 있다면 파일 이름 출력
					System.out.println("\t File name :" + file.getAbsoluteFile());
					list.add(file.getParent() + File.separator + file.getName());

				} else if (file.isDirectory()) {

					System.out.println("Directory name:" + file.getName());
					// 서브디렉토리가 존재하면 재귀적 방법으로 다시 탐색
					list.add(file.getParent() + File.separator + file.getName());
					subDirList(file.getCanonicalPath().toString(), list);

				}

			}

		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

 

실행결과

Directory name:bus_intelligence
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\bus_intelligence\bi_main.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\bus_intelligence\bi_oe_pr.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\bus_intelligence\bi_sh_pr.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\bus_intelligence\bi_views.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\CONTRIBUTING.md
Directory name:customer_orders
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\co_ddl.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\co_dml.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\co_drop_objects.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\co_drop_user.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\co_main.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\co_set_identity_starts.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\co_user.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\customers.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\orders.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\order_items.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\products.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\README.md
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\README.txt
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\sample_queries.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\customer_orders\stores.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\drop_sch.sql
Directory name:human_resources
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\human_resources\hr_analz.sql
 File name :D:\998.Tmp\db-sample-schemas-19.2\db-sample-schemas-19.2\human_resources\hr_code.sql

.
728x90
반응형

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

[Java] JDBC 프로그래밍  (0) 2022.04.20
[Java basic-Utility] 파일 비교  (0) 2022.03.27
Linux OpenJdk 설치  (0) 2022.03.21
728x90
반응형

리눅스에서 OpenJdk 설치하는 방법에 대해 소개 하고 설치된 버전을 손쉽게 변경하는 방법에대해 알아보겠습니다. 

java 설치 (JDK: Java Development Kit: javac)

jdk 설치 리스트 확인 

yum list java*jdk-devel

yum install java-1.8.0-openjdk-devel.x86_64

 

JRE 설치( Java Runtime Environment:java)

 

yum list java*jdk 

yum install java-1.8.0-openjdk.x86_64

 

java version 변경

  • alternatives --config [java/javac] 명령어 수행 후  변경하고자 하는 번호를 선택 하면 됩니다.

 

$ alternatives --config java

2 개의 프로그램이 'java'를 제공합니다.

  선택    명령
-----------------------------------------------
   1           java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/jre/bin/java)
*+ 2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/java)


 

javac 버전 변경

 alternatives --config javac

2 개의 프로그램이 'javac'를 제공합니다.

  선택    명령
-----------------------------------------------
*+ 1           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/bin/javac)
   2           java-1.7.0-openjdk.x86_64 (/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64/bin/javac)
728x90
반응형

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

[Java] JDBC 프로그래밍  (0) 2022.04.20
[Java basic-Utility] 파일 비교  (0) 2022.03.27
[Java basic-Utility] 디렉토리 파일 리스트 조회  (0) 2022.03.26

+ Recent posts