AR삽질러

Java - 입출력(I/O) 본문

JAVA

Java - 입출력(I/O)

아랑팡팡 2023. 4. 17. 14:51
728x90

Java - 입출력(I/O)

 input / output의 약자

 데이터 입력의 대상 : 키보드, 파일, 네트워크를 통해 들어오는 데이터

 데이터 출력의 대상 : 모니터, 파일, 외부 네트워크

 

Stream?

 - Java에서 데이터는 Stream을 통해 입출력된다.

 Stream -> 데이터를 전달하는데 사용되는 장치로 스트림은 단일 방향으로 연속적으로 흘러가는 것을 말한다.

 프로그램의 출발지, 도착지에 따라 입력스트림, 출력스트림으로 사용된다.

In -> Read

 - 모든 작업시 in이나 read 라는 단어가 있으면 읽기기능

Out -> Write

 - 모든 작업시 out이나 write 라는 단어가 있다면 쓰기기능

 

입출력 스트림의 종류

구분 바이트기반스트림 문자기반스트림
입력스트림 출력스트림 입력스트림 출력스트림
최상위 클래스 InputStream OutputStream Reader Writer
하위클래스 FileInputStream FileOutPutStream FileReader FileWriter

 

InputStream의 read()

 - read()는 byte의 내용을 int타입으로 읽어낸다. (int값이 -1인경우 더이상 읽어낼수 있는 데이터가 없는경우)

 - read() -> int : 한 byte에 쓰여진 데이터

 - read(byte[]) -> int :읽어낸 데이터는 byte[]안으로 들어가고 int는 몇 개나 새로운 데이터를 읽어냈는지를 말한다.

 

OutputStream의 write()

 - write(int)는 대상으로 데이터를 전송

 - write(int) -> 한 바이트의 데이터를 전송

 - write(byte[]) -> byte[]안에 있는 데이터들을 전송

 - write(byte[], int, int) -> byte[]안에 있는 데이터들을 시작 위치에서부터 몇개의 개수만큼 데이터들을 전송

 

File class

File byte(I/O)

 - 스트림은 바이트 단위로 데이터를 전송한다.

 - byte Input

   - FileInputStream클래스를 이용하여 입력한다.

   - read()메소드를 이용하여 파일의 자료를 가져온다.

   - 데이터의 끝은 -1

 

 - byte Output

   - FIleOutputStream클래스를 이용하여 출력한다.

  - 주로 write()메소드를 통해 내보내기를 한다.

 

File Class생성자

생성자 설명
File(String pathname) 실제 경로명을 문자열로 처리한다.
File(String parent, String child) 폴더명과 파일명으로 처리한다.
File(File parent, String child) 폴더객체와 파일명으로 처리한다.
File(URL uri) 웹상의 주소로 처리한다.

 

File Class 메소드

메소드 설명
createNewFile() 파일 생성 후 (true / false)반환
createTempFile(String prefix, String suffix, File dir) 임시파일 생성
deleteOnExit() 프로그램이 끝날때 삭제된다.
delete() 즉시 삭제된다.
length() 파일의 크기(바노한형은 long형)

 

성능향상 보조스트림

 - 기본적으로 출력스트림은 내부에 작은 버퍼를 가지고 있다. 메모리버퍼를 추가로 제공하여 프로그램의 실행 성능을 향상시키는 것들에는

 1) 바이트 기반스트림 -> BufferedInputStream, BufferedOutputStream

 2) 문자기반스트림 -> BufferedReader, BufferedWriter

 - BufferedOutputStream은 바이트 기반 출력스트림에 연결되어 버퍼를 제공해주는 보조스트림

 - BufferedWriter는 문자기반 출력스트림에 연결되어 버퍼를 제공해주는 보조스트림이다.

 -BufferedOutputStream과 BufferedWriter는 프로그램에서 전송한 데이터를 내부버퍼에 쌓아두었다가 버퍼가 꽉차면 버퍼의 모든 데이터를 한꺼번에 보낸다. 

 

BufferedOutputStream bos = new BufferedOutputStream(바이트 기반출력 스트림);

BufferedWriter bw = new BufferedWriter(문자기반 출력스트림);

 

Ex01

package io;

import java.io.File;

public class ex01 {
	public static void main(String[] args) throws Exception{ // 직접try ~ catch블록으로 작성
		
		// 파일이 없어도 상관없다.
		File file1 = new File("D:\\test");
		
		// 파일경로와 파일명으로 만들 수 있다.
		File file2 = new File("D:\\test", "aaa.txt");
		
		// 파일경로 (폴더)까지만 만들 수 있다.
		File file3 = new File("D:\\test");
		
		// 파일경로에 객체를 넣어서 만들수 있다.
		File file4 = new File(file3, "aaa.txt");
		
		// File.separator : 폴더구별자
		File dir = new File("D:" + File.separator + "aaa");
		
		File file = new File(dir, "aaa.txt");
	}
}

 

Ex02

package io;

import java.io.*;

public class Ex02 {
	public static void main(String[] args) throws Exception{
		
		File dir = new File("D:\\test" + File.separator + "aaa");
		if (!dir.exists()) {
		    boolean result = dir.mkdirs();
		    if (result) {
		        System.out.println("디렉토리 생성 성공");
		    } else {
		        System.out.println("디렉토리 생성 실패");
		    }
		}
		
		// 임시파일은 앞에 이름을 정하고 중간에 임의의 숫자가 들어간다.
		// 뒤에 이름을 정한다.(확장자)
		File imsi = File.createTempFile("java", ".dat", dir);
		
		imsi.deleteOnExit();
		// 프로그램이 끝날때 삭제가 된다.
		
		Thread.sleep(5000); // 프로그램5초간 sleep
		
		//file.delete();
	}
}

Ex03

package io;

import java.io.File;
import java.io.FileOutputStream;

public class Ex03 {
	public static void main(String[] args) throws Exception{
		File dir = new File("D:\\test", File.separator + "aaa");
		File file = new File(dir, "aaa.txt");
		
		FileOutputStream fos = new FileOutputStream(file, true);
		// file이 없으면 만든다.
		// 객체생성시 true이면 이어쓰기, false이면 다시쓰기가 된다.
		
		// fos.write(65); // 아스키코드
		// fos.write('B');
		
		// 문자열을 byte배열로 반환
		String msg = "\nHello Java World";
		byte[] by = msg.getBytes();
		fos.write(by, 6, 4); // 인덱스위치 6 길이4
		
		fos.close();
	}
}

Ex04

package io;

import java.io.File;
import java.io.FileInputStream;

public class Ex04 {
	public static void main(String[] args) throws Exception{
		
		File dir = new File("D:\\test" + File.separator + "aaa");
		File file = new File(dir, "aaa.txt");
		
		FileInputStream fis = new FileInputStream(file);
		
		while(true) {
			int data = fis.read(); // read()메소드를 한글자 아스키코드로 받는다.
			if(data == -1) {
				break;
			}
			System.out.print((char)data);
		}
		fis.close();
	}
}

 

Ex05

package io;

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;

public class Ex05 {
	public static void main(String[] args) throws Exception{
		
		File dir = new File("D:\\test", File.separator + "aaa");
		File file = new File(dir, "aaa.txt");
		
		FileOutputStream fos = new FileOutputStream(file);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		// 버퍼에 담는다.(성능향상)
		DataOutputStream dos = new DataOutputStream(bos);
		// 내가 원하는 데이터 형태로 넣는다.(기능향상)
		
		int a = 10;
		double b = 3.14;
		String c = "Hellow Java";
		
		dos.writeInt(a);
		dos.writeDouble(b);
		dos.writeUTF(c);
		
		dos.close();
		bos.close();
		fos.close();
	}
}

Ex06

package io;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;

public class Ex06 {
	public static void main(String[] args) throws Exception{
		File dir = new File("D:\\test", File.separator + "aaa");
		File file = new File(dir, "aaa.txt");
		
		FileInputStream fis = new FileInputStream(file);
		BufferedInputStream bus = new BufferedInputStream(fis);
		DataInputStream dis = new DataInputStream(bus);
		
		// 데이터를 넣은 순서대로 꺼낸다.
		int a = dis.readInt();
		double b = dis.readDouble();
		String c = dis.readUTF();
		
		System.out.println("a : " + a);
		System.out.println("b : " + b);
		System.out.println("c : " + c);
		
		dis.close();
		bus.close();
		fis.close();
	}
}

 

Ex07

package io;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;

public class Ex07 {
	public static void main(String[] args) throws Exception{
		
		File dir = new File("D:\\test" + File.separator + "aaa");
		File file = new File(dir, "aaa.txt");
		
		FileWriter fw = new FileWriter(file);
		BufferedWriter bw = new BufferedWriter(fw);
		PrintWriter pw = new PrintWriter(bw);
		
		pw.print("안녕하세요");
		pw.println(30);
		pw.println("I/O입출력입니다.");
		pw.println("PSC만세!");
		
		pw.close();
		bw.close();
		fw.close();
	}
}

Ex08

package io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class Ex08 {
	public static void main(String[] args) throws Exception{
		File dir = new File("D:\\test" + File.separator + "aaa");
		File file = new File(dir, "aaa.txt");
		
		FileReader fr = new FileReader(file);
		BufferedReader br = new BufferedReader(fr);
		
		while(true) {
			String msg = br.readLine();
			if(msg == null) { // text에서 파일의 끝은 null이다.
				break;
			}
			System.out.println(msg);
		}
		br.close();
		fr.close();
	}
}
728x90
반응형
LIST