나의개발일지

입출력(출력편) .for Java 본문

언어/Java

입출력(출력편) .for Java

아. 이렇게 하면 될거 같은데.. 2024. 1. 8. 21:51
728x90


이번 글에서는 출력에 대해 알아본다


출력

OutputStream과 OutputStreamWriter

입력편에서 다룬 InputStream이나 InputStreamReader가 입력을 위한 스트림을 생성하듯이, 이 클래스들은 출력을 위한 스트림을 생성한다는 점만 다르다.

 

OutputStream

<예제 코드>

import java.io.*;

class OutputStreamTest {
	public static void main( String[] args) {
    
    // 키보드를 입력 스트림 객체에 할당하고, 콘솔을 출력 스트림 객체에 할당한다.
    	InputStream is = System.in;
        OutputStream out = System.out;
        
        System.out.pritnln("데이터를 입력하세요 : ");
        
        try{
        //입력 스트림의 객체의 read() 메서드로 1 바이트씩 읽어 들인다.
        	int input = is.read();
            System.out.pritnln("실제 입력된 데이터 : " + input);
            
            System.out.print("출력 데이터 : " );
        //출력 스트림 객체의 write() 메소드로 1 바이트씩 읽어 들인다.
            out.write( (char)input);
            
            out.close();
        } catch (IOException io) {
        	System.out.pritnln( io.toString() );
        }
    }
}

 

<실행 결과>

데이터를 입력하세요 : java
실제 입력된 데이터 : 106
출력 데이터 : j

 

OutputStreamWriter

생성자 설명
OutputStreamWriter( OutputStream out ) 인수로 OutputStream 객체를 받아서 바이트 스트림을 문자 스트림으로 연결한다
OutputStreamWriter( OutputStream out, String encoding) 지정된 인코딩 방식을 사용하는 OutputStreamWriter를 생성한다.

 

<예제 코드>

import java.io.*;

class OutputStreamWriterTest {
	public static void main( String[] args ){
    	//10 개의 문자를 기억할 수 있는 배열을 선언
    	char[] arr = new char[10];
        
        // 키보드를 입력 스트림 리더 객체에 할당하고, 콘솔을 출력 스트림 리더 객체에 할당한다.
        InputStreamReader isr = new InputStreamReader( System.in );
        OutputStreamWriter osw = new OutputStreamWriter( System.out );
        
        System.out.print("데이터를 입력하세요 : ");
        
        try {
        	//10개의 문자를 읽어 배열에 저장한다.
        	int input = isr.read( arr );
            System.out.print( "실제 입력된 글자 : ");
            //배열 내의 10개 문자를 출력한다.
            osw.write( arr );
            osw.close();
            
        } catch (IOException io) {
            System.out.pritnln( io.toString() );
        }
     }
}

 

<실행 결과>

데이터를 입력하세요 : 한글을 입력하고 있습니다.
실제 입력된 글자 : 한글을 입력하고 있

 


BufferedOutputStream과 BufferedWriter

Buffered 로 시작하는 스트림은 버퍼의 기능을 제공해서 입출력 속도를 증가시키는 보조적인 스트림이다.

BufferedOutputStream

생성자 설명
BufferedOutputStream( OutputStream in ) OutputStream 객체를 인수로 받아 버퍼가 사용되는 스트림을 생성한다. 버퍼는 기본 크기 8192 바이트로 잡힌다.
BufferedOutputStream( OutputStream in, int size ) 위의 생성자와 동일하나 버퍼의 크기를 size로 설정한다.

 

<예제 코드>

import java.io.*

class BufferedOutputStreamTest {
	public static void main(String args[]) {
    	try{
        // 파일을 인수로 FileOutputStream 객체를 생성하고 그 객체를 인수로 BufferedOutputStream 객체를 생성한다.
        	FileOutputStream fos = new FileOutputStream("alpha.txt");
            BufferedOutputStream bos = new BufferedOutputStream( fos );
            
            // a에서 z까지 문자를 기록한다. 버퍼를 사용하기 떄문에 실제 파일에 기록 x
            for(int i='a'; i <= 'z'; i++) {
            	bos.write(i);
            }
            
            //버퍼에 기록된 데이터를 실제 파일에 기록한다.
            bos.flush();
            
            fos.close();
            bos.close();
        
        } catch (IOException e) {
        	e.printStackTrace();
        }
    }
}

 

<실행결과>

alpha.txt 파일에 a-z까지 저장

 

BufferedWriter

생성자 설명
BufferedWriter( Writer out ) Writer 객체를 인수로 받아 버퍼가 사용되는 스트림을 생성한다. 버퍼는 기본 크기 8192 바이트로 잡힌다.
BufferedWriter( Writer out, int size ) 위의 생성자와 동일하나 버퍼의 크기를 size로 설장한다.

 

import java.io.*;
import java.util.*;

class BufferedOutputStreamTest {
	public static void main(String args[]) {
    	try{
        	FileReader fr = new FileReader("input.txt");
            BufferedReader br = new BufferedReader(fr);
       
        	FileWriter fw = new FileWriter("output.txt");
            BufferedWriter bw = new BufferedWriter(fw);
            
            int count = 1;
            
            //버퍼에서 파일을 라인 단위로 읽는다
            String line = br.readLine();
            
            while( line != null ) {
            //읽을 라인을 공백을 기준으로 토큰으로 구분하는 객체를 생성한다.
            	StringTokenizer st = new StringTokenizer(line, "");
                
                while(st.hasMoreTokens()){
                	if( st.nextToken().equals( "자바" )) {
                    	
                        //읽은 라인 내에 "자바"라는 단어가 있으면 출력버퍼에 기록하고 버퍼의 내용을 파일에 기록한다.
                        bw.write( line );
                        bw.flush();
                        
                        bw.newLine();
                        break;
                    }
                }
            }
            
            line = br.readLine();
        } catch ( Exception e ) {
        	System.out.pritnln( e.toString() );
        }
    }
}

 

<실행결과>

input.txt output.txt
우리는 자바 언어를 학습합니다.
그리 쉽지는 않지만 어렵지도 않습니다.
자바 언어에 숙달되면 좋겠습니다.
많은 경험이 필요하니 급하게 생각하지 마세요.
우리느 자바 언어를 학습합니다.
자바 언어에 숙달되면 좋겠습니다.
728x90
반응형

'언어 > Java' 카테고리의 다른 글

상속  (0) 2024.01.23
변수  (0) 2024.01.21
객체지향  (0) 2024.01.16
배열  (0) 2024.01.16
입출력(입력편) .for Java  (0) 2024.01.03