'Java'에 해당되는 글 23건

  1. 2008.10.08 텍스트 파일 생성 예제
  2. 2008.10.08 자바로 텍스트 파일 읽기 예제
  3. 2008.10.08 이진 파일, 이진 모드로 열어서 읽기 예제
2008. 10. 8. 15:16

텍스트 파일 생성 예제

자바로, 텍스트 파일을 만들어서, 그 안에 문자열을 쓰고, 저장하는 예제입니다.


텍스트 파일 생성/만들기 예제 소스

소스 파일명: Foo.java
import java.io.*;

public class Foo {
  public static void main(String args[]) {

    try {
      ////////////////////////////////////////////////////////////////
      BufferedWriter out = new BufferedWriter(new FileWriter("out.txt"));
      String s = "출력 파일에 저장될 이런 저런 문자열입니다.";

      out.write(s); out.newLine();
      out.write(s); out.newLine();

      out.close();
      ////////////////////////////////////////////////////////////////
    } catch (IOException e) {
        System.err.println(e); // 에러가 있다면 메시지 출력
        System.exit(1);
    }

  }
}
위의 자바 소스를 컴파일한 후 실행하면, 하드의 현재 디렉토리에 out.txt 라는 텍스트 파일이 생깁니다.

생성된 out.txt 파일의 내용:
출력 파일에 저장될 이런 저런 문자열입니다.
출력 파일에 저장될 이런 저런 문자열입니다.

참고로, newLine() 이라는 메소드는, 현재 운영체제의 종류를 자동으로 판단한 후, 적절한 개행문자를 출력하여 줄바꿈하는 것입니다.

2008. 10. 8. 15:15

자바로 텍스트 파일 읽기 예제

하드에 있는 텍스트 파일을, 명령행 옵션으로 지정해 주면, 그 파일을 한 줄씩 읽어서 화면에 출력하는 자바 프로그램입니다.

if (args.length == 0) 라는 부분은 읽을 파일명을 지정해 주지 않았을 때 에러 메시지를 출력하는 코드입니다.


자바로 텍스트 파일 읽기 예제 소스

소스 파일명: Foo.java
import java.io.*;

public class Foo {
  public static void main(String args[]) {

    if (args.length == 0) {                   // args.length 는 옵션 개수
      System.err.println("Input Filename...");
      System.exit(1);                         // 읽을 파일명을 주지 않았을 때는 종료
    }

    try {
      ////////////////////////////////////////////////////////////////
      BufferedReader in = new BufferedReader(new FileReader(args[0]));
      String s;

      while ((s = in.readLine()) != null) {
        System.out.println(s);
      }
      in.close();
      ////////////////////////////////////////////////////////////////
    } catch (IOException e) {
        System.err.println(e); // 에러가 있다면 메시지 출력
        System.exit(1);
    }

  }
}
위의 소스에서 빗금 쳐진 구역이, 파일을 읽는 핵심부입니다.

FileReader 는 현재 시스템의 기본 인코딩으로 파일을 읽는데, BufferedReader 로 감싸 주어야 합니다.

readLine() 은 파일을 한 줄씩 읽지만 줄바꿈 문자는 읽지 않습니다. 그래서 println()이 아닌 print(s)로 출력하면 모든 줄이 하나로 붙어서 나옵니다.


0.txt 라는 테스트용 텍스트 파일에, 이육사 시인의 '청포도'라는 시가 적혀 있다고 가정합니다.

javac Foo.java
이렇게 컴파일 한 후

java Foo 0.txt
이렇게 실행시킵니다.


실행 결과:
D:\Z>javac Foo.java

D:\Z>java Foo 0.txt

          청포도


                          이육사


내 고장 칠월은
청포도가 익어 가는 시절

이 마을 전설이 주저리주저리 열리고
먼 데 하늘이 꿈꾸며 알알이 들여와 박혀

하늘 밑 푸른 바다가 가슴을 열고
흰 돛단배가 곱게 밀려서 오면,

내가 바라는 손님은 고달픈 몸으로
靑袍를 입고 찾아온다고 했으니

내 그를 맞아, 이 포도를 따먹으면
두 손은 함뿍 적셔도 좋으련

아이야, 우리 식탁엔 은쟁반에
하이얀 모시 수건을 마련해 두렴


D:\Z>

2008. 10. 8. 15:14

이진 파일, 이진 모드로 열어서 읽기 예제

자바에서, 이진파일을 이진모드로 열어서, 읽는 방법입니다. DataInputStream 클래스의 read() 메소드(함수)를 사용합니다. byte 버퍼의 크기만큼 파일에서 읽어옵니다. (이 예제에서는 버퍼 크기가 1024 바이트임)


이진 파일, 이진 모드로 열어서 읽기 예제 소스

소스 파일명: Example.java
import java.io.*;

public class Example {
  public static void main(String[] args) throws IOException {

    String filename = "test.bin";
    byte[] b = new byte[1024];
    int len; // 실제로 읽어온 길이 (바이트 개수)
    int counter = 0;

    DataInputStream in = new DataInputStream(new FileInputStream(filename));

    while ((len = in.read(b)) > 0) {
      for (int i = 0; i < len; i++) { // byte[] 버퍼 내용 출력
        System.out.format("%02X ", b[i]);
        counter++;
      }
    }


    System.out.format("%n%n%n[%d 바이트를 읽어서 출력]", counter);
    in.close();

    System.out.println(); // 줄 바꾸고 종료
  }
}
이진파일의 각 바이트를 십육진수로 변환한 후, 화면에 출력합니다.

컴파일 및 실행 결과 화면:
D:\Z>javac Example.java && java Example
4D 5A 90 20 03 20 20 20 04 20 20 20 FF FF 20 20 B8 20 20 20 20 20 20 20 40 20 20
 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2
0 20 20 20 20 20 20 D0 20 20 20 0E 1F BA 0E 20 B4 09 CD 21 B8 01 4C CD 21 54 68
69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F 74 20 62 65 20 72 75 6E 20 69 6E
 20 44 4F 53 20 6D 6F 64 65 2E 0D 0D 0A 24 20 20 20 20 20 20 20 64 C7 F9 7C 20 A
6 97 2F 20 A6 97 2F 20 A6 97 2F E3 A9 CA 2F 23 A6 97 2F 20 A6 96 2F 77 A6 97 2F
07 60 EA 2F 30 A6 97 2F 07 60 FA 2F 49 A6 97 2F 07 60 F9 2F 02 A6 97 2F 07 60 EF
 2F 21 A6 97 2F 52 69 63 68 20 A6 97 2F 20 20 20 20 20 20 20 20 50 45 20 20 4C 0
1 03 20 B8 E3 22 46 20 20 20 20 20 20 20 20 E0 20 03 01 0B 01 08 20 20 B0 20 20
20 50 20 20 20 20 20 20 CF 1C 20 20 20 10 20 20 20 C0 20 20 20 20 40 20 20 10 20
 20 20 10 20 20 04 20 20 20 20 20 20 20 04 20 20 20 20 20 20 20 20 10 01 20 20 1
0 20 20 20 20 20 20 03 20 20 20 20 20 10 20 20 10 20 20 20 20 10 20 20 10 20 20
20 20 20 20 10 20 20 20 20 20 20 20 20 20 20 20 94 D8 20 20 28 20 20 20 20 20 20
 20 20 31 31 31 30


[353 바이트를 읽어서 출력]

D:\Z>