KDT/Java

240306 Java 입출력과 스트림 2

001cloudid 2024. 3. 6. 17:38
728x90

예외 처리 throws

package test15;

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

public class FileOutputStreamTest2 {

	public static void main(String[] args) throws IOException {
		
		//바이트 단위 스트림 생성과 처리
		//1) 입력 스트림(InputStream) 클래스 상속
		//2) 출력 스트림(OutputStream) 클래스 상속
		//파일 단위 처리스트림(FileInputStream, FileOutputStream) 클래스로 구현
		//FileOutputStream 클래스 : 파일로 저장(내보내기, 쓰기, 출력)하는 스트림을 생성하는 클래스
		//write() 메소드 사용
		FileOutputStream fos = new FileOutputStream("src/test15/output.txt");
		
		fos.write(65); //'A'
		fos.write(66); //'B'
		fos.write(67); //'C'
		fos.write('D');
		fos.write('E');
		fos.write('\n'); 
		fos.write(32); //공백
		byte [] buf = {'B', 'C', 'D','E' };
		fos.write(buf);
		fos.write(buf,1,2);
		
		fos.flush(); //파일 출력 스트림에 남아 있는 데이터를 강제로 비우기(파일로 저장)
		fos.close(); //파일 출력 스트림 닫기
		
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
		
	}

}

 

ABCDE
 BCDECD

 

예외처리 try-catch-finally

package test15;

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

public class FileOutputStreamTest2 {

	public static void main(String[] args){
		
		/*
		//바이트 단위 스트림 생성과 처리
		//1) 입력 스트림(InputStream) 클래스 상속
		//2) 출력 스트림(OutputStream) 클래스 상속
		//파일 단위 처리스트림(FileInputStream, FileOutputStream) 클래스로 구현
		//FileOutputStream 클래스 : 파일로 저장(내보내기, 쓰기, 출력)하는 스트림을 생성하는 클래스
		//write() 메소드 사용
		FileOutputStream fos = new FileOutputStream("src/test15/output.txt");
		
		fos.write(65); //'A'
		fos.write(66); //'B'
		fos.write(67); //'C'
		fos.write('D');
		fos.write('E');
		fos.write('\n'); 
		fos.write(32); //공백
		byte [] buf = {'B', 'C', 'D','E' };
		fos.write(buf);
		fos.write(buf,1,2);
		
		fos.flush(); //파일 출력 스트림에 남아 있는 데이터를 강제로 비우기(파일로 저장)
		fos.close(); //파일 출력 스트림 닫기
		
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
		*/
		
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream("src/test15/output1.txt");
			fos.write(65); //'A'
			fos.write(66); //'B'
			fos.write(67); //'C'
			fos.write('D');
			fos.write('E');
			fos.write('\n'); 
			fos.write(32); //공백
			byte [] buf = {'B', 'C', 'D','E' };
			fos.write(buf);
			fos.write(buf,1,2);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
			fos.flush(); //파일 출력 스트림에 남아 있는 데이터를 강제로 비우기(파일로 저장)
			fos.close(); //파일 출력 스트림 닫기
			} catch (IOException e){
				e.printStackTrace();
			}
		}
		
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
		
		
	}

}

 

ABCDE
 BCDECD

 

예외처리 try-with-resource (jdk7버전이상)

package test15;

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

public class FileOutputStreamTest2 {

	public static void main(String[] args){
		
		/*
		//바이트 단위 스트림 생성과 처리
		//1) 입력 스트림(InputStream) 클래스 상속
		//2) 출력 스트림(OutputStream) 클래스 상속
		//파일 단위 처리스트림(FileInputStream, FileOutputStream) 클래스로 구현
		//FileOutputStream 클래스 : 파일로 저장(내보내기, 쓰기, 출력)하는 스트림을 생성하는 클래스
		//write() 메소드 사용
		FileOutputStream fos = new FileOutputStream("src/test15/output.txt");
		
		fos.write(65); //'A'
		fos.write(66); //'B'
		fos.write(67); //'C'
		fos.write('D');
		fos.write('E');
		fos.write('\n'); 
		fos.write(32); //공백
		byte [] buf = {'B', 'C', 'D','E' };
		fos.write(buf);
		fos.write(buf,1,2);
		
		fos.flush(); //파일 출력 스트림에 남아 있는 데이터를 강제로 비우기(파일로 저장)
		fos.close(); //파일 출력 스트림 닫기
		
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
		*/
		
		/*
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream("src/test15/output1.txt");
			fos.write(65); //'A'
			fos.write(66); //'B'
			fos.write(67); //'C'
			fos.write('D');
			fos.write('E');
			fos.write('\n'); 
			fos.write(32); //공백
			byte [] buf = {'B', 'C', 'D','E' };
			fos.write(buf);
			fos.write(buf,1,2);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
			fos.flush(); //파일 출력 스트림에 남아 있는 데이터를 강제로 비우기(파일로 저장)
			fos.close(); //파일 출력 스트림 닫기
			} catch (IOException e){
				e.printStackTrace();
			}
		}
		
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
		*/
		
		try(FileOutputStream fos = new FileOutputStream("src/test15/output2.txt")){
		
		fos.write(65); //'A'
		fos.write(66); //'B'
		fos.write(67); //'C'
		fos.write('D');
		fos.write('E');
		fos.write('\n'); 
		fos.write(32); //공백
		byte [] buf = {'B', 'C', 'D','E' };
		fos.write(buf);
		fos.write(buf,1,2);
        fos.flush(); //파일 출력 스트림에 남아 있는 데이터를 강제로 비우기(파일로 저장)
		} catch(IOException e) {
			e.printStackTrace();
		}
		
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
		
		
	}

}

 

ABCDE
 BCDECD

 

package test15;

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

public class FileOutputStreamTest2 {

	public static void main(String[] args){
		
		/*
		//바이트 단위 스트림 생성과 처리
		//1) 입력 스트림(InputStream) 클래스 상속
		//2) 출력 스트림(OutputStream) 클래스 상속
		//파일 단위 처리스트림(FileInputStream, FileOutputStream) 클래스로 구현
		//FileOutputStream 클래스 : 파일로 저장(내보내기, 쓰기, 출력)하는 스트림을 생성하는 클래스
		//write() 메소드 사용
		FileOutputStream fos = new FileOutputStream("src/test15/output.txt");
		
		fos.write(65); //'A'
		fos.write(66); //'B'
		fos.write(67); //'C'
		fos.write('D');
		fos.write('E');
		fos.write('\n'); 
		fos.write(32); //공백
		byte [] buf = {'B', 'C', 'D','E' };
		fos.write(buf);
		fos.write(buf,1,2);
		
		fos.flush(); //파일 출력 스트림에 남아 있는 데이터를 강제로 비우기(파일로 저장)
		fos.close(); //파일 출력 스트림 닫기
		
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
		*/
		
		/*
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream("src/test15/output1.txt");
			fos.write(65); //'A'
			fos.write(66); //'B'
			fos.write(67); //'C'
			fos.write('D');
			fos.write('E');
			fos.write('\n'); 
			fos.write(32); //공백
			byte [] buf = {'B', 'C', 'D','E' };
			fos.write(buf);
			fos.write(buf,1,2);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
			fos.flush(); //파일 출력 스트림에 남아 있는 데이터를 강제로 비우기(파일로 저장)
			fos.close(); //파일 출력 스트림 닫기
			} catch (IOException e){
				e.printStackTrace();
			}
		}
		
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
		*/
		
		try(FileOutputStream fos = new FileOutputStream("src/test15/output3.txt",true)){
		
		fos.write(65); //'A'
		fos.write(66); //'B'
		fos.write(67); //'C'
		fos.write('D');
		fos.write('E');
		fos.write('\n'); 
		fos.write(32); //공백
		byte [] buf = {'B', 'C', 'D','E' };
		fos.write(buf);
		fos.write(buf,1,2);
		
		fos.flush(); //파일 출력 스트림에 남아 있는 데이터를 강제로 비우기(파일로 저장)
		} catch(IOException e) {
			e.printStackTrace();
		}
		
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
		
		
	}

}

 

ABCDE
 BCDECDABCDE
 BCDECD

 

바이트 배열로 출력

package test15;

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest3 {
	public static void main(String[] arg) {
		
		//영문자 알파벳 : A ~ Z까지 output4.txt에 저장
					//65~90
		try(FileOutputStream fos = new FileOutputStream("src/test15/output4.txt")){
			int A = 65;
			byte [] abc = new byte[26];
			for(int i = 0 ; i< abc.length;i++) {
				abc[i] = (byte) A;
				A++;
			}
			fos.write(abc);
			
		} catch(IOException e) {
			e.printStackTrace();
		}
		System.out.println("파일(쓰기) 저장이 완료되었습니다.");
	}
}

 

ABCDEFGHIJKLMNOPQRSTUVWXYZ

 


package test15;

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

public class FileOutputStreamTest1 {

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

		//파일 단위 처리 스트림(FileOutputStream) 클래스
		//파일로 저장(내보내기)하는 스트림을 생성하는 클래스
		
		String source = "src/test15/SystemInTest.java"; //읽어온 파일(원본)
		String target = "src/test15/SystemInTest.txt"; //저장(대상)할 파일
		
		try(FileInputStream fis = new FileInputStream(source);
		FileOutputStream fos = new FileOutputStream(target)){
		
		//읽은 byte를 저장할 변수
		int data;
		
		//한 번에 10개씩 읽어와서 저장할 수 있도록 배열 생성
		byte[] total = new byte[10];
		
		while((data = fis.read(total))!= -1) {
			System.out.println(data);
			//데이터가 저장된 배열의 0번째 위치부터 실제로 읽은 byte 수 만큼 쓰기
			fos.write(total,0,data);
		}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
		
	}

}

 

SystemInTest.txt

package test15;

import java.io.InputStream;

public class SystemInTest {

	public static void main(String[] args) {
		
		/*
		1. 표준 입출력
		PrintStream 클래스  out -> 표준출력 스트림(System.out.println()메소드)
		InputStream 클래스  in  -> 표준입력 스트림(System.in)
		OutputStream 클래스 err -> 표준 오류 출력 스트림
		*/
		
		System.out.println("알파벳 여러 개를 쓰고 [Enter]를 누르세요.");
		int i;
		
//		문자 1개 입력받기(바이트 단위임으로 한글은 깨져서 나옴)
//		try {
//			i = System.in.read();
//			System.out.println(i);
//			System.out.println((char)i);
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
		
//		문자 여러개를 입력 받기
		try {
//			while((i = System.in.read()) != '\n') {
			while((i = System.in.read()) != -1) {
				System.out.println(i);
				System.out.println((char)i);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		/*
		System.out.println("알파벳 여러 개를 쓰고 [Enter]를 누르세요.");
		InputStream in = System.in;
		int i;
		try {
			while((i = in.read()) != '\n') {
				System.out.println((char)i);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		*/
		
		
		
		
		
		
		
	}

}

 

 

package test15;

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

public class FileOutputStreamTest1 {

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

		//파일 단위 처리 스트림(FileOutputStream) 클래스
		//파일로 저장(내보내기)하는 스트림을 생성하는 클래스
		
		String source = "src/test15/SystemInTest.java"; //읽어온 파일(원본)
		String target = "src/test15/SystemInTest.txt"; //저장(대상)할 파일
		
		try(FileInputStream fis = new FileInputStream(source);
		FileOutputStream fos = new FileOutputStream(target)){
		
		//읽은 byte를 저장할 변수
		int data;
		
		//한 번에 10개씩 읽어와서 저장할 수 있도록 배열 생성
		//byte[] total = new byte[10];
        
        //한 번에 파일의 바이트 수만큼 저장할 배열의 크기 지정
		byte[] total = new byte[fis.available()];
		
		while((data = fis.read(total))!= -1) {
			System.out.println(data);
			//데이터가 저장된 배열의 0번째 위치부터 실제로 읽은 byte 수 만큼 쓰기
			fos.write(total,0,data);
		}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		
		
	}

}

 

1313

 

문자 단위 스트림

FileReader

package test15;

import java.io.FileReader;
import java.io.IOException;

public class FileReadTest1 {

	public static void main(String[] args) {
		
		//문자(텍스트) 데이터의 입출력을 다루는 스트림 : FileReader 클래스와 FileWriter 클래스
		
		//문자 데이트의 입력을 다루는 스트림 : FileReader
		try(FileReader fr = new FileReader("src/test15/reader.txt")){
		
		int i;
		while((i = fr.read()) != -1) {
			System.out.println((char)i);
		}
		}catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

H
e
l
l
o
 
W
o
r
l
d
!

 

package test15;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriteTest1 {

	public static void main(String[] args) {
		
		//문자(텍스트) 데이터의 입출력을 다루는 스트림 : FileReader 클래스와 FileWriter 클래스
		
		//문자 데이터의 출력(저장, 내보내기)을 다루는 스트림 : FileWriter 클래스
		//문자 단위 출력 스트림으로 텍스트 파일 쓰기(파일로 저장) : 텍스트 파일만 대상
		//문자 단위 출력 스트림 : Writer클래스, FileWriter 클래스 write() 메소드
		try(FileWriter fw = new FileWriter("src/test15/writer.txt")){
		
		fw.write('A');
		fw.write("자바는 java");
		char[] buf = {'B','C','D','E','F'};
		fw.write(buf);
		fw.write(buf,1,2);
		} catch(IOException e) {
			e.printStackTrace();
		}
		System.out.println("파일이 저장되었습니다.");
	}

}

 

A자바는 javaBCDEFCD

 

보조 스트림

package test15;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class InputStreamReaderTest1 {

	public static void main(String[] args) {
		
		//기반 스트림, 보조 스트림
		// 1) 기반 스트림 : 직접 읽거나 쓰는 기능을 가진 스트림
		//FileInputStream, FileOutputStream
		
		// 2) 보조스트림 : 기반 스트림에 부가 기능을 제공하는 스트림
		//InputStreamReader, OutputStreamReader, BufferedInputStream, BufferedOutputStream
		
		//InputStreamReader : InputStream(기반스트림)을 매개변수로 받아 생성되는 보조 스트림
		//바이트 단위로 읽어 들인 내용을 문자로 변환해주는 역할을 하는 스트림
		// -> FileReader 클래스로 스트림을 생성하고 사용가능
		
		//채팅프로그램
		try(InputStreamReader isr = new InputStreamReader(new FileInputStream("src/test15/reader.txt"))){
			int data;
			while((data = isr.read())!= -1) {
				System.out.println((char)data);
			}
		}catch(IOException e) {
			e.printStackTrace();
		}

	}

}

 

파일 복사

package test15;

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

public class FileCopyTest1 {

	public static void main(String[] args) {
		
		//FileInputStream, FileOutputStream 클래스를 사용하여 이미지 파일을 읽어와서 복사
		
		long ms = 0;
		try(FileInputStream fis = new FileInputStream("src/test15/redpanda.png");
		FileOutputStream fos = new FileOutputStream("src/test15/redpanda_1.png")){
			ms = System.currentTimeMillis();
			int i;
			while((i = fis.read())!= -1) {
				fos.write(i);
			}
			ms = System.currentTimeMillis() - ms;
		}catch(IOException e) {
			e.printStackTrace();
		}
		System.out.println("파일 복사 " + ms + "소요됨");

	}

}

 

728x90