텍스트 파일 100 줄 씩 끊어서 나눠 저장하기(자바) 소스
윈도우에도 기본 java 컴파일러 및 java 는 있으므로, 간단한 자바 프로그램으로 텍스트 파일 분할(n 줄씩 끊어주기) 프로그램을 만들었다.
- 사용법
1. cmd 명령창을 띄운 후, cd 명령으로 해당 디렉토리(폴더)로 이동
2. 컴파일
(클래스 파일 있을 경우생략 가능)
javac SplitByLinenumber.java
3. 실행
java SplitByLinenumber [원본파일명] [분할 줄 단위 수] [첫행 반복 여부 Y/n]
첫 줄 반복 여부 값을 Y로 줄 경우, 새 파일 생성 때마다, 가장 첫번째 읽었던 줄을 제목행(헤더, Header, 타이틀 등)으로 보고 반복해서 모든 파일에 똑같이 넣어준다. 이 옵션이 싫다면 n으로 지정한다.
- 프로그램 소스 코드는 아래와 같다.
import java.io.*;
public class SplitByLinenumber {
public static void main(String args[]) {
try {
String fileName = "";
long splitLine = 1000000;
boolean firstHeadLine = true;
String tmpStr = "";
String firstLineStr = "";
if (args.length >= 1)
fileName = args[0];
if (args.length >= 2) {
splitLine = Long.parseLong(args[1]);
}
if (args.length >= 3 && (args[2].equals("N") || args[2].equals("n"))) {
firstHeadLine = false;
}
System.out.println("원본 파일명 : " + fileName);
System.out.println("파일당 줄수 : " + splitLine);
System.out.println("머리글 여부 : " + firstHeadLine);
if (args.length < 1) {
System.out.println("사용법 : java SplitByLinenumber [파일명] [파일당 줄개수(default:1000000)] [Y/n = 첫행 머리글 여부]");
System.out.println("파일당 줄개수(행, 자료수) default 값은 백만개, 첫행이 머리글이면 Y(default), 첫행부터 바로 자료 시작이면 n");
System.exit(-1);
}
if (firstHeadLine)
splitLine++;
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
int n = 1;
long i = 0;
File wrFile = new File(fileName+"_"+n+".txt");
FileWriter fw = new FileWriter(wrFile);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
while ((tmpStr=br.readLine()) != null) {
if (i == 0)
firstLineStr = tmpStr;
pw.println(tmpStr);
i++;
if (i >= splitLine) {
pw.close();
pw = null;
bw.close();
bw = null;
fw.close();
fw = null;
wrFile = null;
n++;
wrFile = new File(fileName+"_"+n+".txt");
fw = new FileWriter(wrFile);
bw = new BufferedWriter(fw);
pw = new PrintWriter(bw);
i = 0;
if (firstHeadLine) {
pw.println(firstLineStr);
i++;
}
}
}
pw.close();
pw = null;
bw.close();
bw = null;
fw.close();
fw = null;
wrFile = null;
br.close();
fr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}