이번에는 파일에 쓰는 과정에 대해 코딩을 해 본다.
첫번째로는 FileOutputStream을 이용하여 경로를 적어두고 그 경로에 해당하는 파일에 작성하겠다고 선언을 한다.
그리고 개행 문자 (ASCII :: 13)이 나올 때 까지 계속해서 write한다.
마지막 개행이 나오면 파일을 닫아준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | package JavaRead; import java.io.File; import java.io.FileOutputStream; public class rwBasic{ public static void main(String []args) throws Exception { FileOutputStream w = new FileOutputStream("C:"+File.separator+"test"+File.separator+"text.txt"); int ch; // 13은 아스키 코드 값으로 엔터를 의미한다.(개행) while((ch = System.in.read()) != 13 ) w.write((byte)ch); //결국 ch를 byte로 받고있기에 한글, 영어 모두 가능하다. w.close(); } } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
다음은 Scanner를 통해 파일을 쓰는 코드이다.
while( !(str = sc.nextLine()).equals(""))의 의미는
str에 일단 nextLine()을 통해 개행 전까지의 문자열을 받아내고, 그 값이 ""와 같은지 즉, 엔터만 친것과 같은지 비교한다.
맞으면 1 틀리면 0을 반환하는데 이때 !가 있으므로 엔터만 치면 !1이니 0이되어 while문을 탈출하게 된다.
즉, 엔터만치면 입력이 종료되는 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package JavaRead; import java.io.File; import java.io.FileWriter; import java.util.Scanner; public class rwBasic{ public static void main(String []args) throws Exception { Scanner sc = new Scanner(System.in); FileWriter w = new FileWriter("C:"+File.separator+"test"+File.separator+"text.txt"); String str; // str에 sc를 통해 입력을 받는데 이것이 ""와 같은지 즉, 개행문자만 들어있는지 판별 while(!(str = sc.nextLine()).equals("")) w.write(str + "\r\n"); w.close(); } } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
이때 \r과 \n은 무엇인지 확인하여야 한다.
\r\n 없을 때 \n 없을 때 \r 없을 때 \r\n 둘다 있을 때
즉, \r\n이 파일 입출력 코드에서는 개행문자라고 인식한다.
마지막으로 어떤 파일을 읽어서 다른 파일에 저장하는 방식은 다음과 같다.
파일 입력 출력 객체를 모두 생성하여 text.txt에 있는 내용을 result.txt에 옮기는 과정이다.
while( (ch = r.read()) != -1)을 통해 계속해서 text.txt에 있는 내용을 읽어오고
Java 파일 기본 입출력 (1)에 있는 Byte 배열을 이용하여 읽어낸 텍스트를 알아보기도 하고,
w.write((byte)ch);를 이용하여 바이트 단위로 텍스트 파일에 저장시켜 볼 수 있다.
(이때 바이트 단위로 텍스트 파일에 써야 한글같은 2byte짜리도 저장이 된다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package JavaRead; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class rwBasic{ public static void main(String []args) throws Exception { FileInputStream r = new FileInputStream("C:"+File.separator+"test"+File.separator+"text.txt"); FileOutputStream w = new FileOutputStream("C:"+File.separator+"test"+File.separator+"result.txt"); int ch; byte []tmp = new byte[100]; int i = 0; // 계속해서 읽어온다. while((ch = r.read()) != -1) { tmp[i++] = (byte)ch; w.write((byte)ch); // 바이트 형식으로 파일에 쓴다. } System.out.println("현재 읽어온 text :: " + new String(tmp)); System.out.println("Copy Complete"); // 항상 파일 입출력 함수를 쓰고 난 뒤에는 파일을 닫아준다. r.close(); w.close(); } } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
'Basic > Java' 카테고리의 다른 글
상수 풀(String constant pool) (0) | 2016.10.27 |
---|---|
String에서 숫자만 추출하고 싶을 때 (0) | 2016.10.27 |
Java 파일 기본 입출력 (1) (0) | 2016.10.16 |
try catch 구문 및 throw 구문 (0) | 2016.10.12 |
Java 대소문자, 공백 제거, 문자열 비교 (2) | 2016.10.12 |