[Java] 자바 #40, FIle입출력(2)

파일 입출력


- 자바 응용프로그램상에서 다루는 데이터들은 데이터의 저장장소가 필요하다.  그중 하나로 메모리로 보관하는 방법이 있는데... 예를 들어 ArrayList 같은 컬렉션에 데이터를 보관하는 것을 생각해보면 된다. 하지만 이러한 방식은 프로그램이 종료되면 사라지는 휘발성, 즉, 영구보관이 불가능하다. 따라서 이를 대체할 보조기억장치인 HDD + 파일같은 물리적으로 데이터를 저장하여 데이터를 유지할 공간이 필요하다.

1. 텍스트 입출력

 - 문자(열) 쓰기/읽기

 - 비문자(열) 쓰기/읽기

2. 바이너리 입출력

 - 비문자(열) 쓰기/읽기(01010101010100010 - 이진 데이터)

 - 이미지, 동영상, 실행파일 등...

인코딩, Encoding

- 문자코드를 부호화(0,1) 하는 작업,

디코딩, Decoding

- 부호 데이터를 문자코드로 변환하는 작업(복호화)

 1==2==3==6 (얘네들 같은 방식)

1. ISO-8859-1

2. EUC-KR

3. ANSI

4. UTF-8

5. UTF-16

6. MS949


 

 ANSI

 UTF-8

 UTF-16

 영어

 1Byte

 1Byte

 2Byte

 한글

 2Byte

 3Byte

 2Byte


파일입출력 순서 

 1. 스트림 객체 생성하기(열기) (쓰기전용)

 2. 스트림 객체를 사용해서 쓰기 작업 진행

 3. 스트림 객체 닫기(***) 까먹고안닫아서 발생하는 에러들이 존재


 쓰기전용 스트림 객체 생성

 - > 쓰기 스트림을 열때 사용되는 모드(Mode)

 

1. 생성모드(Create Mode)

 - 기본모드

 - 파일이 없어도 직접 생성한다.

 - 파일이 있어도 무조건 덮어쓰기

 

2. 추가모드(Append Mode)

 - 추가선택

 - 이어쓰기

 - 기존 파일의 내용을 계속 이어서 쓰기작업.


 파일에 데이터 저장하기1(Byte단위쓰기 -> 즉 1문자씩만 쓸 수 있다.(char)

 

FileOutPutStream


File file = new File("C:\\Class\\File\\data.txt");

try {

  // 스트림 열기

FileOutputStream stream = new FileOutputStream(file);


        //쓰기작업

stream.write(65);//A

stream.write(66);//B

stream.write(67);//C

stream.write(65);//A

stream.write(66);//B

stream.write(67);//C


String str = "Hello Hond~";

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

stream.write(str.charAt(i));

}


stream.write('\t');

stream.write('\n');


String str1 = "bye Hond~";

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

stream.write(str.charAt(i));

}

// 스트림 닫기

stream.close();

System.out.println("쓰기완료");


Process notepad = new ProcessBuilder("notepad.exe", file.getAbsolutePath()).start();


} catch (Exception e) {

e.printStackTrace();

}


파일에 있는 데이터 읽기1(Byte 단위 읽기 -> 즉, 1 문자씩만 읽을 수 있다. (char)


FileInputStream


try {

// 읽기 전용 스트림 생성

FileInputStream stream = new FileInputStream("C:\\Class\\File\\data.txt");


// 모든 내용을 읽기(********* 패턴 외우기)***

int code = -1;

while ((code = stream.read()) != -1) {

System.out.print((char) code);

}

stream.close();

} catch (Exception e) {

e.printStackTrace();

}

}


파일에 데이터 저장하기2( 문자열단위*** ) 


FileWriter

- 한글 가능


try {

FileWriter writer = new FileWriter("C:\\Class\\File\\test.txt");


writer.write("hello\r\n");

writer.write("안녕\r\n");

writer.write(65);// 문자코드입력.

writer.close(); 꼭 닫아주자


} catch (Exception e) {

e.printStackTrace();

}


메모장에 글쓰기 예제


- 예제 설명 : 콘솔창에 계속 문자열을 입력하면 메모장에 해당 문자열이 입력되어 저장되도록 하고 종료시 exit을 입력하여 종료!


BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 얘는 Scanner 객체랑 비슷한 아이니 오해마세요~~


try {

System.out.println("[메모장 쓰기]");

System.out.print("파일명 : ");

String filename = reader.readLine();


FileWriter writer = new FileWriter("C:\\Class\\File\\" + filename);

while (true) {

// 텍스트 입력 > writer 로 쓰기작업

String txt = reader.readLine();


// 종료 입력(exit)

if (txt.equals("exit"))

break;

// 쓰기 : 파일에 직접쓰기 (X)

// 쓰기 : 출력 버퍼에 쓰기(O)

writer.write(txt + "\r\n");

}

writer.close();

reader.close();

System.out.println("메모장 종료");

} catch (IOException e) {

e.printStackTrace();

}


파일에 있는 데이터 읽기2( 문자열단위 *** )


FileReader : 2byte 문자읽기 + 라인단위 읽기(X) + 문자단위 읽기(O) 어정쩡

- 문자단위 읽기


try {

FileReader reader = new FileReader("C:\\Class\\File\\test.txt");

int code = reader.read();

System.out.println(code);


int code = -1;


while ((code = reader.read()) != -1) {

System.out.print((char) code);

}


reader.close();


} catch (Exception e) {

e.printStackTrace();

}


파일에 데이터 저장하기3( 문자 + 문자열 )


BufferedWriter

 - 문자+문자열 쓰기

 - FileWriter와 유사.(거의 같음)


try {

BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Class\\File\\add.txt"));

writer.write("하나");

writer.write("one");

writer.write("둘");

writer.newLine();

writer.write("two");

writer.write("셋");

writer.write("three");

writer.close();

} catch (Exception e) {

e.printStackTrace();

}


파일에 있는 데이터 읽기3( 문자 + 문자열 )


BufferedReader

- 문자 + 문자열 읽기

- 라인단위 읽기 지원.(***)


try {

BufferedReader reader = new BufferedReader(new FileReader("C:\\Class\\File\\add.txt"));


String txt = reader.readLine();

  System.out.println(txt);

txt = reader.readLine();

System.out.println(txt);


String txt = null;


while ((txt = reader.readLine()) != null) {

System.out.println(txt);

}

} catch (Exception e) {

e.printStackTrace();

}


댓글

Designed by JB FACTORY