☭DEVELOPER/#2 웹개발(자바기반 풀스택)

[BACKEND]JAVA_ECLIPSE 30 입출력 스트림

조반짝 2023. 9. 4. 15:43
728x90
반응형

★★★★★

NIO

채널 형식으로 쌍방향 버퍼처리가 가능하고 성능이 더 좋다

 

IO : 스트림 형식, 단방향, 입력 출력 파일 처리

NIO : 버퍼를 쓰는 채널 양방향으로 가능해서 성능이 좋다

 

package chapter14.nio;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

// File 클래스의 copy() 메서드 활용 파일 복사 자바 프로그램 소스 코딩합니다.
public class Nio_File_Copy {

	public static void main(String[] args) throws Exception {
		
		//C드라이브 Test 폴더안에 images 폴더안에 있는 house1.jpg 파일을
		Path from = Paths.get("C:/Test/images/house1.jpg");
		
		//C드라이브 Test 폴더안에 images 폴더안에 있는 copy_house.jpg 파일로
		Path to = Paths.get("C:/Test/images/copy_house.jpg");
		
		// Files.copy() 메서드 활용 표준 카피옵션.REPLACE_EXISTING 적용 copy 실행함.
		Files.copy(from, to, StandardCopyOption.REPLACE_EXISTING);
		
		System.out.println("파일복사가 성공했습니다~");
	}
}


※ java.util.Scanner 클래스와 java.io.BufferedReader 클래스 기능과 차이 메모

1. java.util.Scanner 클래스와 java.io.BufferedReader 클래스는 문자열 입력을 읽고 처리하기 위해 사용합니다.

2. 선언 문법

   1) java.util.Scanner 클래스
  
      Scanner sc = new Scanner(System.in);

   2) java.io.BufferedReader 클래스

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

3. Scanner의 버퍼 크기는 1024 chars, 반면 BufferReader의 버퍼 크기는 8192 chars입니다.

4. BufferReader는 문자열을 단순히 읽고 저장, Scanner는 문자열을 구분하여 분석할 수 있습니다.

5. BufferReader는 동기화가 가능하지만, Scanner는 동기화가 되지 않습니다.

6. BufferReader는 즉시 IOException 처리를 실행하지만, Scanner는 숨기게 됩니다.

7. BufferedReader/BufferedWriter는 Buffer에 있는 IO 클래스로써, 입력된 데이터가 바로 전달되지 않고
 
   중간에 버퍼링이 된 후에 전달되됩니다. 출력도 마찬가지로 버퍼를 거쳐서 간접적으로 출력장치로 전달되기에

   시스템의 데이터처리 효율성을 높여주며 버퍼스트림을InputStreamReader / OutputStreamWriter를 같이 사용하여

   버퍼링을 하게 되면 입출력 스트림으로부터 미리 버퍼에 데이터를 갖다 놓기 때문에 보다 효율적인 입출력이 가능합니다.

8. Scanner를 통해 입력을 받을경우 Space Enter를 모두 경계로 인식하기에 입력받은 데이터를 가공하기 매우 편리합니다.

  하지만 BufferedReader는 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기때문에 입력받은 데이터를

  가공하는 작업이 필요할경우가 많습니다. Scanner에 비해 다소 사용하기 불편하지만, 많은 양의 데이터를 입력받을경우

  BufferedReader를 통해 입력받는 것이 효율면에서 훨씬 좋습니다. 입력시 Buffer 메모리를 로드함으로써 작업속도 차이가 많이납니다.

9. 큰 파일을 읽을 때와 대용량 처리에는 BufferReader가 좋습니다.

10. "BufferReader는 멀티 쓰레드에 안정적이지만, Scanner는 비교적 취약합니다.

    멀티쓰레드의 경우 여러 쓰레드가 같은 프로세스 내의 자원을 공유하기 때문에 서로의 작업에 영향을 줄 수 있습니다.

    예를 들어 A 쓰레드가 작업중입니다. 그러던 중 B 쓰레드에게 넘깁니다. B 쓰레드에서 공유 데이터를 변경하고

    A 쓰레드에 다시 제어권을 넘긴다면 예기치 않은 결과가 나올 수 있습니다. 제대로 된 처리를 위해선 A 쓰레드가

    작업이 끝날 때까지 다른 쓰레드가 영향을 주지 않아야 합니다.

    그리하여 멀티 쓰레드를 활용하는 소켓 예제에서는 대부분 BufferReader를 많이 사용하고 있습니다.

11. Scanner 지원 메소드를 손쉽게 이용할 수 있습니다.

 

 

 

 


1byte 씩 출력하기

 

 

package chapter14.sec01.exam01;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

// 다음 예제는 10, 20, 30이 저장된 각각의 바이트를 파일 C:\Temp\test1.db로 출력해서
// test1.db의 내용으로 파일저장 처리하는 자바 프록램 예시입니다.
// 이 때, 파일 저장 처리는 1byte씩 출력 처리합니다.
public class WriteExample {
	public static void main(String[] args) {
		
		try {
			// 데이터 도착지를 test1.db로 하는 바이트 기반 파일 출력 스트림을 생성합니다.
			OutputStream os = new FileOutputStream("C:/Temp/test1.db");
		
			byte a = 10;
			byte b = 20;
			byte c = 30;
			
			
			// write()를 활용하여 1byte()씩 파일에 출력 처리를 합니다.
			os.write(a); // 여기서는 데이터가 안보임
			os.write(b); // 여기서는 데이터가 안보임
			os.write(c); // 여기서는 데이터가 안보임
			
			os.flush();  // 출력 버퍼에 잔류하는 모든 바이트를 출력 처리합니다.
			os.close();  // 출력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

배열길이 만큼 읽기

ReadExample

package chapter14.sec01.exam04;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

// 다음 예제는 앞서 생성했던 sec01.exam01.WriteExample 실행 클래스에서 생성했던
// C:/Temp/test1.db 파일에 저장된 내용을 1byte씩 끝까지 읽어주는 자바프로그램입니다.
public class ReadExample {

	public static void main(String[] args) {
		
		try {
			InputStream is = new FileInputStream("C:/Temp/test1.db");
		
			while (true) {
				int data = is.read();  // read() 메서스 활용 1byte씩 읽어줍니다.
				
				//만약에, data 변수에 담긴 값이 없다면(-1 이라면)
				if (data == -1) {
					// break 문으로 데이터 읽기를 그만둡니다.
					break;
					
				}
				System.out.println(data);
			}
			is.close(); // 입력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

 

배열로 한번에 처리하기

package chapter14.sec01.exam02;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

// 다음 예제는 10, 20, 30이 저장된 각각의 바이트를 파일 C:\Temp\test1.db로 출력해서
// test2.db의 내용으로 파일저장 처리하는 자바 프록램 예시입니다.
// 이 때, 파일 저장 처리는 배열 전체를 출력 처리합니다.
public class WriteExample {
	public static void main(String[] args) {
		
		try {
			// 데이터 도착지를 test2.db로 하는 바이트 기반 파일 출력 스트림을 생성합니다.
			OutputStream os = new FileOutputStream("C:/Temp/test2.db");
			
			//배열로 처리
			byte[] array = {10,20,30};
			
//			byte a = 10;
//			byte b = 20;
//			byte c = 30;
			
			// 1byte씩 처리하던 것을 배열로 한번에 처리했다
			// write() 메서드를 활용하여 배열의 모든 바이트 값을 파일에 출력처리합니다.
			os.write(array);
			
			// write()를 활용하여 1byte()씩 파일에 출력 처리를 합니다.
//			os.write(a); // 여기서는 데이터가 안보임
//			os.write(b); // 여기서는 데이터가 안보임
//			os.write(c); // 여기서는 데이터가 안보임
			
			os.flush();  // 출력 버퍼에 잔류하는 모든 바이트를 출력 처리합니다.
			os.close();  // 출력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 


 

배열일부 출력하기

package chapter14.sec01.exam03;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

// 다음 예제는 10, 20, 30이 저장된 각각의 바이트를 파일 C:\Temp\test1.db로 출력해서
// test3.db의 내용으로 파일저장 처리하는 자바 프록램 예시입니다.
// 이 때, 파일 저장 처리는 배열의 일부 데이터를 출력 처리합니다.
public class WriteExample {
	public static void main(String[] args) {
		
		try {
			// 데이터 도착지를 test3.db로 하는 바이트 기반 파일 출력 스트림을 생성합니다.
			OutputStream os = new FileOutputStream("C:/Temp/test3.db");
			
			//배열로 처리
			byte[] array = {10,20,30,40,50};
			
//			byte a = 10;
//			byte b = 20;
//			byte c = 30;
//			byte d = 40;
//			byte e = 50;
			
			// os.write(b, off, len);
			// write() 메서드를 화룡하여 배열의 일부 바이트값을 파일에 출력처리합니다.
			// 여기서는 배열의 1번 인덱스값부터 3개의 데이터를 파일에 출력처리합니다.
			os.write(array, 1, 3);
			
			// write() 메서드를 활용하여 배열의 모든 바이트 값을 파일에 출력처리합니다.
//			os.write(array);
			
			// write()를 활용하여 1byte()씩 파일에 출력 처리를 합니다.
//			os.write(a); // 여기서는 데이터가 안보임
//			os.write(b); // 여기서는 데이터가 안보임
//			os.write(c); // 여기서는 데이터가 안보임
//			os.write(d); // 여기서는 데이터가 안보임
//			os.write(e); // 여기서는 데이터가 안보임
			
			os.flush();  // 출력 버퍼에 잔류하는 모든 바이트를 출력 처리합니다.
			os.close();  // 출력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Readexample 로 출력하기


배열길이 만큼 읽기

package chapter14.sec01.exam05;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

// 다음 예제는 길이가 100인 배열을 생성하고 read(byte[]b) 메서드로 한꺼번에 100byte를
// 읽고 배열에 저장 처리하는 자바 프로그램 입니다. 즉, 파일에 읽을 바이트가 100개 이상이
// 남아있을 경우에만 100byte를 한꺼번에 읽게 합니다. 그렇지 않으면, 읽을 수 있는 바이트 수 만큼만 읽습니다.
// 다음 예제는 앞서 생성했던 sec01.exam01.WriteExample 실행 클래스에서 생성했던
// C:/Temp/test2.db 파일에 저장된 내용을 배열길이만큼 끝까지 읽어주는 자바프로그램입니다.
public class ReadExample {

	public static void main(String[] args) {
		
		try {
			InputStream is = new FileInputStream("C:/Temp/test2.db");
			
			// 길이가 100인 배열 buffer 를 생성해 줍니다.
			byte[] buffer = new byte[100];
			
			while (true) {
				// read() 메서스 활용 배열 길이 만큼 읽어줍니다.
				int readByteNum = is.read(buffer);  
				
				
				//만약에, readByteNum 변수에 담긴 값이 없다면(-1 이라면)
				if (readByteNum == -1) {
					// break 문으로 데이터 읽기를 그만둡니다.
					break;
				}
				// 파일에서 읽은 바이트 수만큼 반복해서, 배열에 저장된 바이트를 
				// console 화면으로 표시(출력)하게 합니다.
				for (int i = 0; i < readByteNum; i++) {
					System.out.println(buffer[i]);
				}
			}
			is.close(); // 입력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

지정한 길이만큼 읽기

package chapter14.sec01.exam06;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

// 다음 예제는 길이가 5인 배열을 생성하고 read(byte[]b,int off,int len) 메서드로 
// 선별적으로 배열에 저장 처리하는 자바 프로그램 입니다. 
// 즉,읽을 수 있는 바이트 수 만큼만 읽습니다.
// 다음 예제는 앞서 생성했던 sec01.exam03.WriteExample 실행 클래스에서 생성했던
// C:/Temp/test3.db 파일에 저장된 내용을 배열길이만큼 끝까지 읽어주는 자바프로그램입니다.
// 즉, 지정한 길이만큼 읽어주는 자바프로그램을 소스 코딩합니다.
public class ReadExample {

	public static void main(String[] args) {
		
		try {
			InputStream is = new FileInputStream("C:/Temp/test3.db");
			
			// 길이가 5인 배열 buffer를 생성해 줍니다.
			byte[] buffer = new byte[5];
			
			// InputStream의  read(byte[]b,int off,int len) 메서스 활용 
			// 아래와 같이, 3byte를 읽고, buffer[2], buffer[3], buffer[4]에
			// 각각 저장처리를 합니다.
			int readByteNum = is.read(buffer,2,3);  

				
				//만약에, readByteNum 변수에 담긴 값이 없다면(-1 이라면)
				if (readByteNum != -1) {
				
					// 파일에서 읽은 바이트 수만큼 반복해서, 배열에 저장된 바이트를 
					// console 화면으로 표시(출력)하게 합니다.
					for (int i = 0; i < buffer.length; i++) {
						System.out.println(buffer[i]);
					}
				}
			is.close(); // 입력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

 


한문자씩 출력하기

package chapter14.sec01.exam07;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;

// 다음 예제는 'A', 'B', 'C'가 저장된 각각의 바이트를 파일 C:\Temp\test7.db로 출력해서
// test7.txt의 내용으로 파일저장 처리하는 자바 프록램 예시입니다.
// 이 때, 파일 저장 처리는 한 문자씩 출력 처리합니다.(캐릭터형)
public class WriteExample {
	public static void main(String[] args) {
		
		try {
			// 데이터 도착지를 test7.txt로 하는 바이트 기반 파일 출력 스트림을 생성합니다.
			Writer writer = new FileWriter("C:/Temp/test7.txt");
		
			char a = 'A';
			char b = 'B';
			char c = 'C';
			
			// write() 메서드를 활용하여 한문자씩 파일에 출력처리합니다.
			
			// write()를 활용하여 1byte()씩 파일에 출력 처리를 합니다.
			writer.write(a); // 여기서는 데이터가 안보임
			writer.write(b); // 여기서는 데이터가 안보임
			writer.write(c); // 여기서는 데이터가 안보임
			
			System.out.println("파일에 데이터 저장처리가 되었습니다!");
			writer.flush();  // 출력 버퍼에 잔류하는 모든 바이트를 출력 처리합니다.
			writer.close();  // 출력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

배열전체를 출력하기

package chapter14.sec01.exam08;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;

// 다음 예제는 'A','B','C'가 저장된 각각의 바이트를 파일 C:\Temp\test8.txt로 출력해서
// test8.txt의 내용으로 파일저장 처리하는 자바 프록램 예시입니다.
// 이 때, 파일 저장 처리는 배열 전체를 출력 처리합니다.
public class WriteExample {
	public static void main(String[] args) {
		
		try {
			// 데이터 도착지를 test8.txt로 하는 바이트 기반 파일 출력 스트림을 생성합니다.
			Writer writer = new FileWriter("C:/Temp/test8.txt");
			
			//배열로 처리
			char array []= {'A','B','C'};
			

			// 1byte씩 처리하던 것을 배열로 한번에 처리했다
			// write() 메서드를 활용하여 배열의 모든 문자 값을 파일에 출력처리합니다.
			writer.write(array);
			
			writer.flush();  // 출력 버퍼에 잔류하는 모든 바이트를 출력 처리합니다.
			writer.close();  // 출력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 


한 문자씩 출력하기

package chapter14.sec01.exam09;

import java.io.FileNotFoundException;

//Ctrl + Shift + O : import 자동 정리
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;

// 다음 예제는 'A','B','C','D','E'가 저장된 각각의 바이트를 파일 C:\Temp\test9.txt로 출력해서
// test9.txt의 내용으로 파일저장 처리하는 자바 프록램 예시입니다.
// 이 때, 파일 저장 처리는 배열의 일부 데이터를 출력 처리합니다.
public class WriteExample {
	public static void main(String[] args) {
		
		try {
			// 데이터 도착지를 test3.db로 하는 바이트 기반 파일 출력 스트림을 생성합니다.
			Writer writer = new FileWriter("C:/Temp/test9.txt");
			
			//배열로 처리
			char[] array = {'A','B','C','D','E'};
			

			
			// writer.write(b, off, len);
			// write() 메서드를 화룡하여 배열의 일부 바이트값을 파일에 출력처리합니다.
			// 아래는 배열의 1번 인덱스부터 3개를 파일에 출력처리합니다.
			writer.write(array, 1, 3);
			
			// write() 메서드를 활용하여 배열의 모든 바이트 값을 파일에 출력처리합니다.
//			os.write(array);
			
			// write()를 활용하여 1byte()씩 파일에 출력 처리를 합니다.
//			os.write(a); // 여기서는 데이터가 안보임
//			os.write(b); // 여기서는 데이터가 안보임
//			os.write(c); // 여기서는 데이터가 안보임
//			os.write(d); // 여기서는 데이터가 안보임
//			os.write(e); // 여기서는 데이터가 안보임
			
			writer.flush();  // 출력 버퍼에 잔류하는 모든 바이트를 출력 처리합니다.
			writer.close();  // 출력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 


문자열 출력하기

package chapter14.sec01.exam10;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;

// 다음 예제는 "ABC"가 저장된 문자열을  파일 C:\Temp\test10.txt로 출력해서
// test10.txt의 내용으로 파일저장 처리하는 자바 프로그램 예시입니다.
// 이 때, 파일 저장 처리는 한 문자씩 출력 처리합니다.(캐릭터형)
public class WriteExample {
	public static void main(String[] args) {
		
		try {
			// 데이터 도착지를 test10.txt로 하는 바이트 기반 파일 출력 스트림을 생성합니다.
			Writer writer = new FileWriter("C:/Temp/test10.txt");
		
			String str = "ABC";

			// write()를 활용하여 1byte()씩 파일에 출력 처리를 합니다.
			writer.write(str); // ABC
			writer.write(str, 1, 2); // BC
			
			System.out.println("파일에 데이터 저장처리가 되었습니다!");
			writer.flush();  // 출력 버퍼에 잔류하는 모든 바이트를 출력 처리합니다.
			writer.close();  // 출력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

read() 메서드

package chapter14.sec01.exam11;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

// 다음 예제는 앞서 생성했던 sec01.exam07.WriteExample 실행 클래스에서 생성했던
// C:/Temp/test7.txt 파일에 저장된 내용을 1byte씩 끝까지 읽어주는 자바프로그램입니다.
public class ReadExample {

	public static void main(String[] args) {
		
		try {
			Reader reader = new FileReader("C:/Temp/test7.txt");
		
			while (true) {
				// read() 메서드 활용 한문자씩 읽어줍니다.
				int data = reader.read();  
				
				//만약에, data 변수에 담긴 값이 없다면(-1 이라면)
				if (data == -1) {
					// break 문으로 데이터 읽기를 그만둡니다.
					break;
					
				}
				System.out.println((char)data);
			}
			reader.close(); // 입력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

배열 길이 만큼 읽기

package chapter14.sec01.exam12;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

// 다음 예제는 길이가 100인 배열을 생성하고 read(char[]cbuf) 메서드로 한꺼번에 100b문자를
// 읽고 배열에 저장 처리하는 자바 프로그램 입니다. 즉, 파일에 읽을 문자가 100개 이상이
// 남아있을 경우에만 100문자를 한꺼번에 읽게 합니다. 그렇지 않으면, 읽을 수 있는 문자 수 만큼만 읽습니다.
// 다음 예제는 앞서 생성했던 sec01.exam08.WriteExample 실행 클래스에서 생성했던
// C:/Temp/test8.txt 파에 저장된 내용을 배열길이만큼 끝까지 읽어주는 자바프로그램입니다.
public class ReadExample {

	public static void main(String[] args) {
		
		try {
			Reader reader = new FileReader("C:/Temp/test8.txt");
			
			// 길이가 100인 배열 buffer 를 생성해 줍니다.
			char[] buffer = new char[100];
			
			while (true) {
				// read() 메서스 활용 배열 길이 만큼 읽어줍니다.
				int readCharNum = reader.read(buffer);  
				
				
				//만약에, readCharNum 변수에 담긴 값이 없다면(-1 이라면)
				if (readCharNum == -1) {
					// break 문으로 데이터 읽기를 그만둡니다.
					break;
				}
				// 파일에서 읽은 바이트 수만큼 반복해서, 배열에 저장된 바이트를 
				// console 화면으로 표시(출력)하게 합니다.
				for (int i = 0; i < readCharNum; i++) {
					System.out.println(buffer[i]);
				}
			}
			reader.close(); // 입력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

지정한 길이 만큼 읽기

package chapter14.sec01.exam13;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

// 다음 예제는 길이가 5인 배열을 생성하고 read(char[]cbuf,int off,int len) 메서드로 
// 선별적으로 배열에 저장 처리하는 자바 프로그램 입니다. 
// 즉,읽을 수 있는 문자 수 만큼만 읽습니다.
// 다음 예제는 앞서 생성했던 sec01.exam09.WriteExample 실행 클래스에서 생성했던
// C:/Temp/test9.txt 파일에 저장된 내용을 배열길이만큼 끝까지 읽어주는 자바프로그램입니다.
// 즉, 지정한 길이만큼 읽어주는 자바프로그램을 소스 코딩합니다.
public class ReadExample {

	public static void main(String[] args) {
		
		try {
			Reader reader = new FileReader("C:/Temp/test9.txt");
			
			// 길이가 5인 배열 buffer를 생성해 줍니다.
			char[] buffer = new char[5];
			
			// InputStream의  read(byte[]b,int off,int len) 메서스 활용 
			// 아래와 같이, 3의 문자를 읽고, buffer[2], buffer[3], buffer[4]에
			// 각각 저장처리를 합니다.
			int readCharNum = reader.read(buffer, 2, 3);  

				
				//만약에, readByteNum 변수에 담긴 값이 없다면(-1 이라면)
				if (readCharNum != -1) {
				
					// 파일에서 읽은 문자 수만큼 반복해서, 배열에 저장된 문자를 
					// console 화면으로 표시(출력)하게 합니다.
					for (int i = 0; i < buffer.length; i++) {
						System.out.println(buffer[i]);
					}
				}
				reader.close(); // 입력 스트림 자원을 닫아줍니다.
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

 

 

 

 

728x90
반응형