본문 바로가기
JAVA SE/Code

CODE [20.07.30/Day_16] Java SE / String, String Builder, String Buffer | I/O (입력과 출력) Stream 스트림

by 파프리카_ 2020. 7. 30.
728x90
반응형

[ IO ]

File

java.io.File

directory를 생성하는 예제

/TestFile.java

kosta203 directory

 

import java.io.File;

public class TestFile {
	public static void main(String[] args) {
		// java.io.File class : 파일을 제어하는 기능을 제공
		String path = "C:" + File.separator + "kosta203"; //File.separator -> window : //
		File dir = new File(path);
		System.out.println(dir);
		
		//exists() : 존재여부 확인
		System.out.println(dir.exists()); //true
		
		//isFile() : 파일인지
		System.out.println(dir.isFile()); //false
		
		//isDirectory() : 디렉토리(폴더)인지
		System.out.println(dir.isDirectory()); //true
		
		//getPath() : 경로확인
		System.out.println(dir.getPath());
		
		
		// 새로운 directory 생성
		String path2 = dir.getPath() + File.separator + "iotest2";
		File dir2 = new File(path2);
		System.out.println(dir2.mkdirs()); //true
		
		//getParentFile() : 상위 디렉토리로 이동
		File dir3 = dir2.getParentFile();
		System.out.println(dir2.getPath()); // C:\kosta203\iotest2
		System.out.println(dir3.getPath()); // C:\kosta203
		
		//kosta203 directory에 있는 파일 및 디렉토리 정보를 모두 나열
		String array[] = dir3.list();
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
			/* 출력값 :
			 * bin 
			 * CS50 
			 * Dev-Cpp 
			 * iotest 
			 * iotest2 
			 * Python 
			 * python_test 
			 * SE-study-workspace
			 * se-workspace 
			 * tool
			 */
		}
		
		// 파일과 디렉토리를 분류하여 나열
		File array2[] = dir3.listFiles();
		for (int  i= 0; i  < array2.length; i++) {
			if (array2[i].isFile())
				System.out.println("file: " + array2[i].getName());
			else
				System.out.println("directory: " + array2[i].getName());
		}
		/* 출력값:
		 * file: a.txt 
		 * directory: bin 
		 * directory: CS50 
		 * directory: Dev-Cpp 
		 * directory: iotest 
		 * directory: iotest2 
		 * directory: Python 
		 * directory: python_test 
		 * directory: SE-study-workspace 
		 * directory: se-workspace 
		 * directory: tool
		 */
	}
}

 


Stream 

java.io

 

Output 예제

 

list의 정보를 파일에 입력하기

/TestOutPut2.java

package step2;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

public class TestOutPut2 {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("줄리엣");
		list.add("클레어");
		list.add("쥬디");
		
		//list의 정보를 파일에 입력하기
		try
		{
			//1. 파일 객체 만들기 : FileWriter class
			FileWriter fw = new FileWriter("C:\\kosta203\\iotest\\friend.txt");
			
			//2. 입출력 객체 만들기 : PrintWriter class
			PrintWriter pw = new PrintWriter(fw);
			
			//3. 정보 입력
			int i= 0;
			while(i < list.size()) {
				pw.println(list.get(i));
				i++;
			}
			
			//4. 닫기
			pw.close();
			
			//5. exception 발생 여부 확인
			System.out.println("exception 발생 없이 정상 수행됨");
		}
		
		catch (IOException e) 
		{
			e.printStackTrace();
		}

	}
}

이렇게 파일에 입력이 잘 되었다.

 


Scanner를 이용한 I/O구현 프로그램

 

Main Class

/TestOutput3.java 

import java.io.File;
import java.io.IOException;


public class TestOutput3 {
	public static void main(String[] args) {
		MenuService service = new MenuService();

		String path = 
				"C:" + File.separator + "kosta203" 
				+ File.separator + "iotest2" 
				+ File.separator + "order.txt";

		// try
		try {
			service.order(path);
			
			// exception 발생 여부 확인
			System.out.println("exception 발생 없이 정상 수행됨");

		}

		// catch
		catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

 

Service Class

/MenuService.java

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

//throws
public class MenuService{

	public void order(String path) throws IOException { // throws
		// Scanner로 입력받기
		Scanner s = new Scanner(System.in); //콘솔에 입력되는 stream
		
		//파일에 출력할 stream
		// 1. 파일 객체 만들기 2. 입출력 객체 만들기
		PrintWriter pw = new PrintWriter(new FileWriter(path));
		
		System.out.println("**점심메뉴**");

		// 주문 끝 메세시가 입력될 때까지 계속 반복한다.
		while (true) {
			System.out.print("메뉴를 입력하세요: ");
			
			// scanner로 입력받은 값 menu에 할당
			String menu = s.nextLine();

			if (menu.equals("주문 끝"))
				break;
			else
				pw.println(menu); //파일에 기록
		}

		System.out.println("==주문완료==");
		System.out.println(path + "에 주문목록이 저장되었습니다.");
		s.close(); // scanner 종료
		pw.close();
	}
}

 

Console

 

File

/order.txt


Input 예제

 

파일의 정보를 읽어오기

/TestOutPut2.java

package step5;

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

public class TestInput2 {
	public static void main(String[] args) {
		String path = 
				"C:" + File.separator + "kosta203" 
				+ File.separator + "iotest2" 
				+ File.separator + "TheRoyalTenenbaums.txt";
	
		try
		{
			// 1. FileReader(path) : 파일 import class로 객체 만들기
			FileReader fr = new FileReader(path);
			
			// 2. BufferedReader(): 파일 reading class로 객체 만들기
			BufferedReader br = new BufferedReader(fr);
			
			//3. 파일 한줄씩 읽어오기
			while (br.ready()) {
				System.out.println(br.readLine());
			}
			/* 출력값:
			 * 《로얄 테넌바움》(The Royal Tenenbaums)은 2001년 미국의 코미디 드라마 영화이다....
			 */
		}
		
		catch (FileNotFoundException fe)
		{
			fe.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
}

 


지금까지 배운것을 다 정리해보자 !!

 

Main class

 

1 . Output

/TestIOSerivce.java

package step6;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;


public class TestIOService {
	public static void main(String[] args) {
		String path = "C:" + File.separator + "kosta203" + File.separator + "iotest3"+ File.separator + "test.txt";

		IOService service = new IOService();
		ArrayList<String> list = new ArrayList<String>();

		list.add("노가리");
		list.add("참치");
		list.add("삼겹살");

		
		try
		{
			service.saveFile(path, list);
		}

		catch (FileNotFoundException fe) 
		{
			fe.printStackTrace();
			
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
			
		} 
	}
}

 

2 . Input

/TestIOService2.java

package step6;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;

public class TestIOService2 {
	public static void main(String[] args) {
		String path = 
				"C:" + File.separator + 
				"kosta203" + File.separator + 
				"iotest3"+ File.separator + "test.txt";
	
		IOService service = new IOService();
		
		ArrayList<String> list;
		
		try
		{
			list = service.readFile(path);
			for (int i = 0; i < list.size(); i++) {
				System.out.println(list.get(i));
			}
		}

		catch (FileNotFoundException fe) 
		{
			fe.printStackTrace();
			
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
			
		} 
		
	}
}

 

Service class

 

/IOService.java

package step6;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

public class IOService {

	/**
	 * path를 이용해 디렉토리 생성하고 파일 생성하여, 매개변수 리스트의 정보를 파일에 출력하는 메서드
	 * 
	 * @param path
	 * @param list
	 * @throws IOException 
	 */
	public void saveFile(String path, ArrayList<String> list) throws IOException {
		// 1. 디렉토리 생성
		File file = new File(path);
		File dir = file.getParentFile(); // dir: 파일의 부모 디렉터리
		boolean result = dir.mkdirs();
		System.out.println("디렉토리 생성 :" + result);

		// 2. 읽을 파일 대상 객체 생성
		PrintWriter pw = new PrintWriter(new FileWriter(path));
	
		// 3. 파일에 정보 입력
		for (int i = 0; i < list.size(); i++) {
			pw.println(list.get(i));
		}
	
		// 4. 파일 닫기
		pw.close();
	}

	
	/**
	 * path를 이용해 파일의 정보를 읽어와 arraylist에 담은 후 반환해주는 메서드
	 * 
	 * @param path
	 * @return
	 * @throws IOException 
	 */
	public ArrayList<String> readFile(String path) throws IOException{
		//읽은 정보를 담아 반환해줄 list 선언
		ArrayList<String> list = new ArrayList<String>();
		
		// 1. 파일 import class로 객체 만들기
		FileReader fr = new FileReader(path);
		
		// 2. 파일 reading class로 객체 만들기
		BufferedReader br = new BufferedReader(fr);

		// 3. 파일 한줄씩 읽어오기
		while (br.ready()) {
			list.add(br.readLine());
		}
		
		// 4. 파일 닫기
		br.close();
		
		return list;
	}
}
728x90
반응형