본문 바로가기
웹개발/Java

Java IO 패키지 정리 1

by 인생여희 2021. 3. 17.

Java IO 패키지 정리 1

 

자바 IO 패키지 예제 - git

자바 스레드 예제 - git

 

FileInputStream 예제 1 

 

package sec02.exam01.inputStream_read;

import java.io.FileInputStream;
import java.io.InputStream;



public class ReadExam {

	public static void main(String[] args) throws Exception{
		
		
		/*
		    바이너리 기반 입력
		 	FileInputStream 객체의 read() 메소드 이용해서 파일의 문자 읽기
		 */
		
		//while문 
		int whileCount = 0;
		
		//인풋 스트림 구하기
		InputStream is = new FileInputStream("/Users/k/Documents/workspace/chat/src/test.txt");
		
		int readByte;
		
		//다읽을때 까지 while 문 돌기 - 7번 돈다.
		while(true) {
			
			 //읽은 문자값 (아스키 코드)97 98 99 ...
			//입력 스트림으로 부터 1바이트 읽고 읽은 바이트를 리턴한다.
			/*
			 read 메소드
			 입력 스트림으로 부터 1바이트 읽고 -> 4바이트 int 타입으로 리턴 
			 4바이트중 끝의 1바이트에만 데이터가 들어가 있다.
			*/
			 readByte = is.read();
			 //System.out.println(readByte);
			 
			
			 //읽은값이 없으면
			 if(readByte == -1) {
				 break;
			 
			 }else {
				 
				 whileCount += 1;
			 }
			 
			 //출력
			 //abcdefg
			 System.out.print((char)readByte);
		}
		
		System.out.print("읽은 개수 : " + whileCount);
		//읽은 개수 : 8
		
		is.close();
		
	}

}

 

 

FileInputStream 예제 2

 

package sec02.exam01.inputStream_read;

import java.io.FileInputStream;
import java.io.InputStream;

public class ReadExam2 {

	public static void main(String[] args) throws Exception{
		
		
	/*
	 	FileInputStream 객체의 read() 메소드 이용해서 파일의 문자 읽기
	 	new byte[3]; 객체를 이용해서 인풋스트림에서 여러개의 문자를 읽는다.
	 	is.read(바이트수 객체);
	 */
		
		//while문 
		int whileCount = 0;
		
		//인풋 스트림 구하기
		InputStream is = new FileInputStream("/Users/k/Documents/workspace/chat/src/test.txt");
		
		System.out.println("is : " + is); 
		//is : java.io.FileInputStream@2f7c7260
		
		int readByteNO;
		
		
		//인풋 스트림에서 읽을 바이트 수 (3글자씩 읽게 한다.)
		byte[] readBytes = new byte[3];
		
		
		//전체 문자열 저장 변수
		String data = "";
		
		
		while(true) {
			
			//인풋 스트림에서 readBytes 개수 만큼 읽기
			//읽은 바이트 수! 를 리턴한다.
			readByteNO = is.read(readBytes);
			
			
			//읽은게 없으면 -1 
			if(readByteNO == -1) {
				
				break;
			 
			 }else {
				 
				 whileCount += 1;
			 }
			
			//readBytes 배열의 0 인덱스 위치부터 readCharNo length만큼 String객체로 생성
			data += new String(readBytes, 0, readByteNO);
		}
				
		
		System.out.println(data);
		
		System.out.print("읽은 개수 : " + whileCount); 
		//읽은 개수 : 3
		
		//인풋 스트림을 마지막에는 닫아준다.
		is.close();

		
	}

}

 

 

FileInputStream 예제 3

 

package sec02.exam01.inputStream_read;

import java.io.FileInputStream;
import java.io.InputStream;

public class ReadExam3 {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		
		InputStream is = new FileInputStream("/Users/k/Documents/workspace/chat/src/test.txt");
		
		
		//총 4바이트만 읽겠다.
		byte[] readBytes = new byte[4];
		
		//위에서 읽은 바이트 중 2번째 index 부터 시작해서 1번째 문자값만 읽겠다. 
		//나머지는 0
		
		is.read(readBytes, 2, 1);
		
		for(int i = 0; i < readBytes.length; i++) {
			
			System.out.print(readBytes[i]);
			//0 0 97 0
			
		}
		
		
		is.close();
		
	}

}

 

 

FileOutputStream 예제 1

 

package sec02.exam01.outputSteam_write;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class Write1 {

	public static void main(String[] args) throws Exception {
		
	/*
	    바이너리 기반 출력
	 	FileOutputStream 객체의 write() 메소드 이용해서 파일에 문자 쓰기
	 */	
		
	OutputStream os	= new FileOutputStream("/Users/k/Documents/workspace/chat/src/test2.txt");
	
	//ABC 문자가 byte 타입 배열에 들어가 있다.
	byte[] data = "ABC".getBytes();
	
	//byte 배열의 개수만큼 돌면서 파일에 작성
	for(int i = 0 ; i < data.length; i++) {
		
		//출력 스트립으로 1바이트를 보낸다.
		os.write(data[i]);
	}

	//버퍼에 잔류하는 모든 바이트를 출력한다.
	os.flush();
	
	//사용한 시스템 자원을 반납하고 출력 스트림을 닫는다.
	os.close();
	
	
	}

}

 

FileOutputStream 예제 2

 

package sec02.exam01.outputSteam_write;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class Write2 {

	public static void main(String[] args) throws Exception {
		
	/*
	 	FileOutputStream 객체의 write() 메소드 이용해서 파일에 문자 쓰기
	 */	
		
	OutputStream os	= new FileOutputStream("/Users/k/Documents/workspace/chat/src/test3.txt");
	
	//ABC 문자가 byte 타입 배열에 들어가 있다.
	byte[] data = "ABC".getBytes();
	
	//파일에 작성
	//바이트 배열의 모든 바이트를 출력 스트림으로 보낸다.
	os.write(data);

	os.flush();
	
	os.close();
	
	
	}

}

 

FileOutputStream 예제 3

 

package sec02.exam01.outputSteam_write;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class Write3 {

	public static void main(String[] args) throws Exception {
		
	/*
	 	FileOutputStream 객체의 write() 메소드 이용해서 파일에 문자 쓰기
	 */	
		
	OutputStream os	= new FileOutputStream("/Users/k/Documents/workspace/chat/src/test4.txt");
	
	//ABC 문자가 byte 타입 배열에 들어가 있다.
	byte[] data = "ABC".getBytes();
	
	//파일에 작성

	os.write(data , 1, 2);
	//BC 만 기록된다.

	os.flush();
	
	os.close();
	
	
	}

}

 

FileReader 예제 1

 

package sec02.exam02.reader_read;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

public class Reader1 {

	public static void main(String[] args) throws Exception {
		
		// 문자기반 입력
		// FileReader객체의 read() 메소드 이용해서 파일의 문자 읽기

		Reader reader = new FileReader("/Users/k/Documents/workspace/chat/src/test.txt");
		
		//4바이트 int
		int readData;
		
		while(true) {
		
			//FileReader 객체에서 파일을 읽고 반환값으로 아스키 코드 값을 리턴한다.
			//입력 스트림으로 부터 한개의 문자를 읽고 리턴한다.
			//한개의 문자(2바이트)를 읽고 4바이트 int 타입으로 리턴한다.
			readData = reader.read();
			
			//읽은 문자가 없으면 -1 리턴
			if(readData == -1) {break;}
			
			System.out.print((char)readData);
			//abcdefg
		}
		
		reader.close();
		
	}

}

 

FileReader 예제 2

 

package sec02.exam02.reader_read;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;

public class Reader2 {

	public static void main(String[] args) throws Exception {
		
		// FileReader객체의 read() 메소드 이용해서 파일의 문자 읽기		
		Reader reader = new FileReader("/Users/k/Documents/workspace/chat/src/test.txt");
		
		int readCharNo;
		
		//2바이트 char 배열 생성
		char[] charBuf = new char[2];
		
		String data = "";
		
		while(true) {
		
			//FileReader 객체에서 파일을 읽고 반환값으로 아스키 코드 값을 리턴한다.
			//입력 스트림으로 부터 읽은 문자들을 매개값으로
			//주어진 문자 배열 cbuf[off] 부터 len 개 까지 저장한다.
			//실제로 읽은 문자 수인 len 개를 리턴한다.
			readCharNo = reader.read(charBuf);
			
			//읽은 문자가 없으면 -1 리턴
			if(readCharNo == -1) {break;}
			
			//charBuf 배열의 0 인덱스 위치부터 readCharNo length만큼 String객체로 생성
			data += new String(charBuf, 0, readCharNo);
			
		}
		
		
		System.out.print(data);
		//abcdefg
		reader.close();
		
	}

}

 

FileReader 예제 3

 

package sec02.exam02.reader_read;

import java.io.FileReader;
import java.io.Reader;

public class Reader3 {

	public static void main(String[] args) throws Exception {
		
		// FileReader객체의 read() 메소드 이용해서 파일의 문자 읽기
		Reader reader = new FileReader("/Users/k/Documents/workspace/chat/src/test.txt");
		
		int readCharNo;
		
		//4바이트 char 배열 생성
		char[] charBuf = new char[4];
		
		//FileReader 객체에서 읽은 문자열 중에서 4바이트 char 배열중 Index 1번 부터 2번째 까지만 읽기
		readCharNo = reader.read(charBuf, 1, 2);
		
		for(int i = 0 ; i < charBuf.length; i++) {
			System.out.println(charBuf[i]);
		}

		/*	 
			a
			b

		 */
		
		reader.close();
		
	}

}

 

FileWriter 예제 1

 

package sec02.exam02.writer_write;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Writer1 {

	public static void main(String[] args) throws Exception {
		
		//파일이 작성될 위치
		Writer writer	= new FileWriter("/Users/k/Documents/workspace/chat/src/test5.txt");
		
		char[] data = "aaabbbbfccc".toCharArray();
		
		//aaabbbbfccc 문자열 개수 만큼 돈다.
		for(int i =0 ; i < data.length; i++) {
			
			System.out.print(data[i]);
			//aaabbbbfccc
			
			//파일에 쓰기
			writer.write(data[i]);
		
			
		}
		
		writer.flush();
		writer.close();
		
	}

}

 

FileWriter 예제 2

 

package sec02.exam02.writer_write;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Writer2 {

	public static void main(String[] args) throws Exception {
		
		//파일이 작성될 위치
		Writer writer	= new FileWriter("/Users/k/Documents/workspace/chat/src/test6.txt");
		
		char[] data = "aaabbbbfccc".toCharArray();
		
		System.out.print(data);
		//aaabbbbfccc
			
			
		//파일에 쓰기
		writer.write(data);

		
		
		writer.flush();
		writer.close();
		
	}

}

 

FileWriter 예제 3

 

package sec02.exam02.writer_write;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Writer3 {

	public static void main(String[] args) throws Exception {
		
		//파일이 작성될 위치
		Writer writer	= new FileWriter("/Users/k/Documents/workspace/chat/src/test7.txt");
		
		char[] data = "aaabbbbfccc".toCharArray();
		
		System.out.print(data);
		//aaabbbbfccc
			
			
		//파일에 쓰기
		writer.write(data,1,2); //aa

		
		writer.flush();
		writer.close();
		
	}

}

 

FileWriter 예제 4

 

package sec02.exam02.writer_write;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class Writer4 {

	public static void main(String[] args) throws Exception {
		
		//파일이 작성될 위치
		Writer writer	= new FileWriter("/Users/k/Documents/workspace/chat/src/test7.txt");
		
		//char[] data = "aaabbbbfccc".toCharArray();
		
		String data = "fghjkl";
		System.out.print(data);
		//fghjkl
			
			
		//파일에 쓰기
		writer.write(data,3,2); //jk

		writer.flush();
		writer.close();
		
	}

}

 

 

File 예제

 

package sec04.exam01.file;

import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileExample {

	public static void main(String[] args) throws Exception {
		/*
		
		File 클래스
		IO 패키지에서 제공하는 File 클래스는 파일 크기, 파일 속성, 파일 이름 등의 
		정보를 얻어내는 기능과 파일 생성 및 삭제 기능을 제공한다.
		! 파일의 데이터를 읽고 쓰는 기능은 제공하지 않는다!
		 
		 */
		
		
		// 파일 객체 생성
		File dir = new File("/Users/k/Documents/workspace/chat/src/test");
		
		File file1 = new File("/Users/k/Documents/workspace/chat/src/file1.txt");
		File file2 = new File("/Users/k/Documents/workspace/chat/src/file2.txt");
		File file3 = new File(new URI("file:///Users/k/Documents/workspace/chat/src/file3.txt"));
		
		
		//위의 파일 객체 경로가 없으면 생성
		if(dir.exists() == false) {dir.mkdirs();}
		if(file1.exists() == false) {file1.createNewFile();}
		if(file2.exists() == false) {file2.createNewFile();}
		if(file3.exists() == false) {file3.createNewFile();}
		
		
		//출력할 디렉토리 경로
		File temp = new File("/Users/k/Documents/workspace/chat/src");
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a HH:mm");
		
		
		//파일객체 경로에 존재하는 파일 및 디렉토리 출력 
		
		File[] contents = temp.listFiles();
		
		System.out.println("날짜              시간         형태       크기    이름");
		System.out.println("-------------------------------------------------------------------");
		
		
		for(File file : contents) {
			System.out.println(sdf.format(new Date(file.lastModified())));
			
			//디렉토리면
			if(file.isDirectory()) {
				
				System.out.print("\t<DIR>\t\t\t" + file.getName());
				
			//파일이면
			}else {
				System.out.print("\t\t\t" + file.length() + "\t" + file.getName());
			}
			
			System.out.println();
		}
		
	}

}

 

 

FileInputStream 예제 

 

package sec04.exam01.file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class FileInputStreamExample {

	public static void main(String[] args){
		
		//파일로 부터 바이트 단위로 읽어 들일때 사용
		//첫번째 방법
		FileInputStream fis;
		
		try {
			fis = new FileInputStream("/Users/k/Documents/workspace/chat/src/test.txt");
			
			int data;
			
			while( (data = fis.read()) != -1 ) {
				System.out.write(data);
				//abcdefg
			}
			
			//파일 닫기
			fis.close();
			
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

}

 

FileOutputStream 예제 

 

package sec04.exam01.file;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class FileOutputStreamExample {

	public static void main(String[] args) throws Exception {
		
		
		String originFileName = "/Users/k/Documents/workspace/chat/src/test/house.jpg";
		
		String targetFileName = "/Users/k/Documents/workspace/chat/src/home.jpg";
		
		
		//파일로 부터 바이트 단위로 읽어 들일때 사용
		//두번째 방법
		
		//읽을 파일 객체 준비
		FileInputStream fis	= new FileInputStream(originFileName);
		
		
		//프로그램으로 부터 바이트 단위로 파일에 쓸때 사용
		//쓸 파일 객체 준비
		FileOutputStream fos = new FileOutputStream(targetFileName);
	
		
		int readByteNo;
		
		//읽을 바이트 수
		byte[] readBytes = new byte[100];
		
		//위의 바이트 수 만큼 읽는다.
		//readByteNo = fis.read(readBytes);

		
		//위의 바이트 수 만큼 읽는다.
		//읽은 값이 있으면 파일을 쓴다.
		while((readByteNo = fis.read(readBytes)) != -1) {
			
			System.out.println("readByteNo : " + readByteNo);
			//readByteNo : 100 .... 
			//readByteNo : 100 .... 
			
			fos.write(readBytes , 0 , readByteNo);
		}
		
		
		//파일 객체 닫기
		fos.flush();
		fos.close();
		fis.close();
		
		System.out.println("복사 성공");
		
	}

}

 

FileReader 예제

 

package sec04.exam01.file;

import java.io.FileReader;


public class FileReaderExample {

	public static void main(String[] args) throws Exception {
		
		
		//텍스트 파일로부터 데이터를 읽어 들일 때 사용
		//문자 단위로 읽기 때문에 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 읽을 수 없다.
		FileReader fr = new FileReader("/Users/k/Documents/workspace/chat/src/test.txt");

		
		int readCharNo;
		
		
		char [] cbuf = new char[100];
		
		
		while((readCharNo = fr.read(cbuf)) != -1) {
			
			String data = new String(cbuf , 0, readCharNo);
			
			System.out.print(data);
			//abcdefg

		}
		
		
		fr.close();

	}

}

 

FileWriter 예제

 

package sec04.exam01.file;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileWriterExample {

	public static void main(String[] args) throws Exception {
	
		//프로그램으로 부터 텍스트 파일을 쓸 때 사용
		//문자 단위로 쓰기 때문에 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 쓸 수 없다.
		File file = new File("/Users/k/Documents/workspace/chat/src/test_KOR.txt");

		FileWriter fw = new FileWriter(file,true);
		
		
		fw.write("FileWriter는 한글로된 " + "\r\n");
		fw.write("문자열을 바로 출력할 수 있다. " + "\r\n");
		fw.flush();
		fw.close();
		System.out.println("파일에 저장완료");
		
		
	}

}

 

참고

https://blog.naver.com/plateauh/222085091595

 

이것이 자바다 :: 이론 정리 18장 - IO 기반 입출력 및 네트워킹

CHAPTER 18 - IO 기반 입출력 및 네트워킹 ​​18.1 IO 패키지 소개 ➡ 데이터 입출력!: 프로그...

blog.naver.com

https://estindev.tistory.com/entry/%EC%9E%90%EB%B0%94-IO-%EC%A0%95%EB%A6%AC

https://willbfine.tistory.com/413?category=835334