KDT/Java

240304 Java - 입출력과 스트림 1

001cloudid 2024. 3. 4. 12:51
728x90

※코딩 테스트

  • 자료 구조/알고리즘 문제해결 형식
  • API 구현 형식
  • 과제 형식

문제 해결 과정 : 요구사항이해 -> 설계/검증 -> 기능 구현 -> 결과

 

자바 입출력과 스트림

스트림

자바에서 모든 입출력은 스트림(stream)을 통해서 이루어짐

 

표준 입출력

package test15;


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.IOException;

public class FileinputStreamTest1 {

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

		/*
		 바이트 단위 스트림
		 1) 입력 스트림(InputStream) 상속
		 2) 출력 스트림(OutputStream) 상속
		 3) 파일 단위 처리 스트림(FileInputStream)
		 파일로부터 바이트 단위로 읽어 들이는 스티름 입력 클래스(스트림 생성)
		 그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일을 읽을 수 있음
		 */
		
		FileInputStream fis = new FileInputStream("D:\\java_basic\\workspace\\javastudy\\src\\test15\\SystemInTest.java");
//		System.out.println(fis.read());
//		System.out.println(fis.read());
//		System.out.println(fis.read());
//		
//		System.out.println((char)fis.read());
//		System.out.println((char)fis.read());
//		System.out.println((char)fis.read());
		
		int i; //읽은 byte를 저장해놓은 변수
		while((i = fis.read()) != -1) {
			System.out.print((char)i);
		}
		
		
		
	}

}

 

한글이 깨져서 결과가 나타남

 

package test15;

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

public class FileinputStreamTest1 {

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

		/*
		 바이트 단위 스트림
		 1) 입력 스트림(InputStream) 상속
		 2) 출력 스트림(OutputStream) 상속
		 3) 파일 단위 처리 스트림(FileInputStream)
		 파일로부터 바이트 단위로 읽어 들이는 스티름 입력 클래스(스트림 생성)
		 그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일을 읽을 수 있음
		 */
		
        //파일 스트림 생성
		FileInputStream fis = new FileInputStream("D:\\java_basic\\workspace\\javastudy\\src\\test15\\SystemInTest.java");
//		System.out.println(fis.read());
//		System.out.println(fis.read());
//		System.out.println(fis.read());
//		
//		System.out.println((char)fis.read());
//		System.out.println((char)fis.read());
//		System.out.println((char)fis.read());
		
		int i; //읽은 byte를 저장해놓은 변수
		while((i = fis.read()) != -1) {
//			System.out.print((char)i);
			System.out.write(i);
		}
		
        fis.close(); //파일스트림닫기
		
		
	}

}

 

한글이 깨지지 않고 결과가 나타남

 

※파일 경로

		//파일경로 표시(절대 경로)
//		FileInputStream fis = new FileInputStream("D:\\java_basic\\workspace\\javastudy\\src\\test15\\SystemInTest.java"); 
		//D:\\java_basic\\workspace\\javastudy\\src\\test15\\SystemInTest.java 
//		FileInputStream fis = new FileInputStream("D:/java_basic/workspace/javastudy/src/test15/SystemInTest.java");
		//D:/java_basic/workspace/javastudy/src/test15/SystemInTest.java
		
		//파일경로 표시(상대 경로)
		//프로젝트가 기준 최상위 src
		
		//파일 스트림 생성
		FileInputStream fis = new FileInputStream("src/test15/SystemInTest.java");

 

 

package test15;

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

//byte 배열로 읽기
public class FileinputStreamTest2 {

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

		/*
		 바이트 단위 스트림
		 1) 입력 스트림(InputStream) 상속
		 2) 출력 스트림(OutputStream) 상속
		 3) 파일 단위 처리 스트림(FileInputStream)
		 파일로부터 바이트 단위로 읽어 들이는 스티름 입력 클래스(스트림 생성)
		 그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일을 읽을 수 있음
		 */
		
		FileInputStream fis = new FileInputStream("src/test15/input2.txt");
		
		//읽어 온 byte수 저장할 배열 지정
		byte [] bs = new byte[10];
		
		int i;
		
		while((i = fis.read(bs)) != -1) {
			for(byte b : bs) {
				System.out.print((char)b);
			}
			System.out.println(" : " + i + "바이트 읽음");
		}
		System.out.println("끝");
		fis.close();
		
		
	}

}

 

package test15;

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

//byte 배열로 읽기
public class FileinputStreamTest2 {

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

		/*
		 바이트 단위 스트림
		 1) 입력 스트림(InputStream) 상속
		 2) 출력 스트림(OutputStream) 상속
		 3) 파일 단위 처리 스트림(FileInputStream)
		 파일로부터 바이트 단위로 읽어 들이는 스티름 입력 클래스(스트림 생성)
		 그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일을 읽을 수 있음
		 */
		
		FileInputStream fis = new FileInputStream("src/test15/input2.txt");
		
		//읽어 온 byte수 저장할 배열 지정
		byte [] bs = new byte[10];
		
		int i;
		
		while((i = fis.read(bs)) != -1) {
//			for(byte b : bs) {
//				System.out.print((char)b);
//			}
			for(int k=0; k<i ;k++) {
				System.out.print((char)bs[k]);
			}
			
			
			System.out.println(" : " + i + "바이트 읽음");
		}
		System.out.println("끝");
		fis.close();
		
		
	}

}

 

 

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/test/SystemInTest.java"; //읽어온 파일(원본)
		String target = "src/test/SystemInTest.txt"; //저장(대상)할 파일
		
		FileInputStream fis = new FileInputStream(source);
		FileOutputStream fos = new FileOutputStream(target);
		
		
		
	}

}

 

 

 

 

 

 

 

 

 

 

 

 

728x90