프로그래밍

텍스트 파일 100 줄 씩 끊어서 나눠 저장하기(자바) 소스

할랑할랑 2014. 8. 13. 13:05
반응형

텍스트 파일 100 줄 씩 끊어서 나눠 저장하기(자바) 소스

윈도우에도 기본 java 컴파일러 및 java 는 있으므로, 간단한 자바 프로그램으로 텍스트 파일 분할(n 줄씩 끊어주기) 프로그램을 만들었다. 

SplitByLinenumber.class

SplitByLinenumber.java



- 사용법

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();
  }
 }
}

 

반응형