본문 바로가기
Study/Java

[Java] 입력과 출력

by JYHAN 2020. 7. 4.

입력/출력 이란?

다른 곳의 데이터를 가져오는 것을 입력, 다른 곳으로 데이터를 보내는 것을 출력이라고 한다

 

입/출력 기본 클래스

입/출력에 사용되는 기본 클래스는 1byte 단위로 데이터를 전송하는 InputStream, OutputStream이 있다

입출력
Input/OutputStream 종류

FileInputStream / FileOutputStream

파일에 데이터를 읽고/쓰기 위한 클래스로 read(), write() 메서드를 이용한다

 

FileInputStream

  • read(); - 1byte씩 읽는다
  • read(byte[]); - [] 크기만큼 읽는다

 

FileOutputStream

  • write(byte[] b); - 전체 쓰기
  • write(byte[], int off, int len); - off(시작점), len(길이)

파일 복사

import java.io.*;

public class MainClass {
	public static void main(String[] args) {
		InputStream inputStream = null;
		OutputStream outputStream = null;
		
		try {
			inputStream = new FileInputStream("C:\\copy.txt");
			outputStream = new FileOutputStream("C:\\paste.txt");
			
			byte[] arr = new byte[3];
			
			while(true) {
				int len = inputStream.read(arr);
				if(len==-1) break; // 읽을 데이터가 없을 때까지
				outputStream.write(arr,0,len);
			}
		} catch(Exception e){
			e.printStackTrace();
		}finally {
			if(inputStream != null) {
				try {
					inputStream.close();
				}catch(Exception e) {e.printStackTrace();}
			}
			if(outputStream != null) {
				try {
					outputStream.close();
				}catch(Exception e) {e.printStackTrace();}
			}
		}
	}
}

 

DataInputStream, DataOutputStream

byte 단위의 입출력을 개선해서 문자열을 좀 더 편리하게 다룰 수 있다

Data I/O Stream

import java.io.*;

public class Main {
	public static void main(String[] args) {
		
		String str = "Hello World!!!!";
		OutputStream outputStream = null;
		DataOutputStream dataOutputStream = null;
		
		try {
			outputStream = new FileOutputStream("C:\\paste.txt");
			dataOutputStream = new DataOutputStream(outputStream);
			
			dataOutputStream.writeUTF(str); // 인코딩
			
		} catch(Exception e){
			e.printStackTrace();
		}finally {
			try {
				if(dataOutputStream != null) dataOutputStream.close();
			}catch(Exception e) {e.printStackTrace();}
			
			try {
				if(outputStream != null) outputStream.close();
			}catch(Exception e) {e.printStackTrace();}
		}
	}
}

 

BufferedReader, BufferedWriter

byte 단위의 입출력을 개선해서 문자열을 좀 더 편리하게 다룰 수 있다

InputStream을 확장해서 DataInputStream을 사용했듯이, 

FileReader를 확장해서 BufferedReader를 사용한다

 

 

Scanner

import java.util.Scanner;

Scanner sc = new Scanner(System.in);

int n = sc.nextInt();
String s = sc.nextLine();
String s = sc.next();
char c = sc.next().charAt(0); // sc.nextChar()가 아님을 주의!!!!

hasNext()
hasNextXXX()
nextXXX()

 

객체를 참조할 때 사용하는 '.'

. 은 객체의 메모리 참조를 의미한다
따라서 st.countTokens()를 여러 번 쓰는 것보다  int count=st.countToken라고 쓰는 것이 더 효율적이다

댓글