-
[Java] 입출력 스트림(Stream)프로그래밍/JAVA 2022. 8. 10. 21:33728x90
자바에서 데이터는 스트림을 통해 입출력하게되며 스트림은 단일방향, 연속적으로 흘러가는 것을 의미한다. 스트림은 입출력을 동시에 처리할 수 없는 이유로 데이터를 입력 받아야 할 경우 입력 스트림을 사용하고 데이터를 출력할 경우 출력 스트림을 사용한다. 자바 java.io 패키지에서는 InputStream 클래스와 OutputStream 클래스를 제공하고 입출력 스트림 클래스의 하위 클래스 표현시 접미사를 붙여 표현한다.
스트림 클래스는 다음과 같이 크게 두 종류로 바이트 기반 스트림, 문자 기반 스트림으로 구분된다.
바이트 기반 스트림은 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력할 때 사용하며 InputStream과 OutputStream은 바이트 기반 입출력 스트림의 최상위 클래스로 접미사를 붙여 클래스를 구분한다.
- FileInputStream/FileOutputStream : 파일
- ByteArrayInputStream/ByteArrayOutputStream : 메모리
- PipedInputStream/PipedOutputStream : 프로세스
- AudioInputStream/AudioOutputStream : 오디오 장치
InputStream/OutputStream 클래스는 각각 read(), write() 메소드를 포함하고 있어 읽고 쓰는 기능을 수행한다.
import java.io.FileInputStream; import java.io.FileOutputStream; public class File { public static void main(String[] args) { String input = "C:\\aiclass\\java\\day10\\input.txt"; String output = "C:\\aiclass\\java\\day10\\output.txt"; FileInputStream fis; FileOutputStream fos; try { fis = new FileInputStream(input); fos = new FileOutputStream(output); int b; while ((b = fis.read()) != -1) { // -1 : 데이터가 없다라는 뜻. 따라서, 데이터가 있으면 while 진행 fos.write(b); System.out.print((char) b + " "); } fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } }
// input.txt Hello World! Hello Java!
실행결과 H e l l o W o r l d ! H e l l o J a v a ! Process finished with exit code 0 ---------------------------------------------------------------- // output1.txt Hello World! Hello Java!
문자 기반 스트림은 문자 데이터를 읽고 출력할 때 사용한다. Reader와 Writer 는 문자 기반 입출력 스트임의 최상위 클래스이며, 하위 클래스 표현시 접미사로 붙여 클래스를 구분한다.
- FileReader/FileWriter : 파일
- CharArrayReader/CharArrayWriter : 메모리
- PipedReader/PipedWriter : 프로세스
- StringReader/StringWriter : 문자열
import java.io.FileWriter; public class File2 { public static void main(String[] args) { String str = "Hello Java!"; try{ FileWriter fw = new FileWriter("output2.txt"); fw.write(str.charAt(0)); // charAt(index): String문에서 원하는 인덱스 장소의 문자열을 문자로 변환 fw.write("\t"); fw.write(str); fw.write("\n"); fw.write("안녕하세요!"); fw.close(); }catch (Exception e){ e.printStackTrace(); } } }
실행결과 ---------------------------------------------------------------- // output2.txt H Hello Java! 안녕하세요!
PrintWriter 클래스는 문자열을 출력하는 Writer 스트림 속성을 가진 클래스로 OutputStream의 자식 클래스이며 byte 단위 출력 클래스인 PrintStream의 Print 메소드를 모두 구현하여 사용할 수 있음. 반드시 참조변수.close(); 로 닫아주어야한다.
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.PrintWriter; import java.util.Scanner; public class File3 { public static void main(String[] args) { String file1 = "output3.txt"; String[] arr = {"김사과", "오렌지", "반하나", "이메론"}; try { PrintWriter pw = new PrintWriter(new FileOutputStream(file1)); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); pw.print(arr[i] + " "); } pw.close(); // 닫지않을 경우 다른곳에서 접근이 불가능하고 파일에 저장이 안됨. } catch (Exception e) { e.printStackTrace(); } } }
실행결과 김사과 오렌지 반하나 이메론 ---------------------------------------------------------------- // output3.txt 김사과 오렌지 반하나 이메론
728x90'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] 제네릭(Generic) 타입 (0) 2022.08.11 [Java] 중첩 클래스 (0) 2022.08.11 [Java] 예외처리(Exception) (0) 2022.08.10 [Java] Map 컬렉션 클래스 (0) 2022.08.09 [Java] Set 컬렉션 클래스 (0) 2022.08.09