Java 관련/Java

[Java] 입출력(IO - InputOutput)

씨네 2021. 11. 19. 14:16
728x90


package com.test01;

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

public class MTest01 {
	
	public static void main(String[] args) {

		// C에 test_io라는 폴더 생성
		File fi = new File("C:/test_io");

		// test_io폴더가 있으면 exists출력 없으면 make directory출력 하고 폴더 생성
		if (fi.exists()) {
			System.out.println("exists");
		} else {
			System.out.println("make directory");
			fi.mkdirs();
		}
		
		// fi 안에 (밑에) AA라는 folder(directory) 생성
		File fiAA = new File(fi, "AA");
		fiAA.mkdir();

		// test_io 아래 BB폴더 생성
		File fiBB = new File("C:\\test_io","BB");
		fiBB.mkdir();
		
		// AA 밑에 a.txt 파일 생성
		File aTxt = new File(fiAA, "a.txt");
		
		try {
			// checked exception
			aTxt.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

 

첫 번째 실행(위쪽)과 두 번째 실행(아래쪽) 결과

package com.test01;

import java.io.File;

public class MTest02 {
	
	public static void main(String[] args) {
		File fi = new File("C:\\");
		prnList01(fi);
		System.out.println("--------------------------------------");
		prnList02(fi);
	}
	
	public static void prnList01(File fi) {
		for (String list : fi.list()) {
			System.out.println(list);
		}
	}
	
	public static void prnList02(File fi) {
		//파일과 디렉토리를 구분해서 출력하자.
		//file : ...
		//dir : ...
		//폴더의 갯수 : 0개
		//파일의 갯수 : 0개
		int fileCount = 0;
		int dirCount = 0;
		for (File f : fi.listFiles()) {
			if(f.isDirectory()){
			System.out.println("dir : " + f.getName());
			dirCount++;
			} else if(f.isFile()) {
				System.out.println("file : " + f.getName());
				fileCount++;
			} 
		}
		System.out.println("폴더의 갯수 : " + dirCount);
		System.out.println("파일의 갯수 : " + fileCount);
	}

}

이 코드는 컴퓨터마다 실행되는 결과가 다르니 한번 직접 출력해보세요~

package com.test01;

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

public class MTest03 {

	public static void main(String[] args) {
		
		File fi = new File("a.txt");
		try {
			MyOutput(fi);
			MyInput(fi);
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
		
	// throws : 해당 메소드 내부에서 발생할 수 있는 예외를, 메소드 호출하는 곳으로 위임
	private static void MyOutput(File fi) throws IOException{
		FileOutputStream fo = new FileOutputStream(fi);
		
		for(int i = 65; i < 91; i++) {
			fo.write(i);
		}
		//반드시!!
		fo.close();
	}
	
	private static void MyInput(File fi) throws IOException {
		FileInputStream fin = new FileInputStream(fi);
		int res = 0;
		
		while((res = fin.read()) != -1) {
			System.out.print((char)res);
		}
		fin.close();
	}
	
}

MTest03.java 실행 결과

이 코드를 출력시키면 콘솔 창에 위와 같은 결과가 나오고 a.txt라는 파일이 생기며 해당 폴더 안에도 이 내용이 적혀 있습니다.

package com.test01;

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

public class MTest04 {
	
	public static void main(String[] args) throws IOException {
		File fi = new File("b.txt");
		
		MyOutput(fi);
		MyInput(fi);
	}
	
	// read
	private static void MyInput(File fi) throws IOException {
		FileReader fr = new FileReader(fi);
		int ch;
		while((ch = fr.read()) != -1) {
			System.out.print(ch);
		}
		fr.close();
		
	}
	
	// write
	private static void MyOutput(File fi) throws IOException {
		FileWriter fw = new FileWriter(fi, false);
		
		fw.write("연습중입니다.\n");;
		fw.append("abc\t").append("def");
		
		fw.close();
	}

}

 

MTest04.java의 실행 후 콘솔 창의 결과(위쪽)과 실행 후 생긴 b.txt 파일 안의 내용 결과(아래쪽)

package com.test01;

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

public class MTest05 {

	public static void main(String[] args) {
		File fi = new File("b.txt");
		
		MyOutput(fi);
		MyInput(fi);
	}
	
	
	private static void MyOutput(File fi) {
		FileWriter fw = null;
		
		try {
			fw = new FileWriter(fi, true);
			fw.write("다시 연습합니다.");
			fw.append("abc\n");
		}catch(IOException e) {
			e.printStackTrace();
		}finally {
			try {
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			//close 알아서
		}
	}
	
	private static void MyInput(File fi) {
		//try with resources
		try(FileReader fr = new FileReader(fi)){
			int ch;
			
			while((ch = fr.read()) != -1 ) {
				System.out.print((char)ch);
			}
			
		}catch(FileNotFoundException e) {
			e.printStackTrace();
		} catch(IOException e) {
			e.printStackTrace();
		}
	}
}

실행시킬 때마다 누적됩니다.

b.txt 다시 볼까요?


package com.test02;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class MTest01 {

	public static void main(String[] args) throws IOException {
		
		String file = "a.jpg";
		/* 
		파일 객체를 만들어서 넣고있음
		FileInputStream fi = new FileInputStream(file);
		BufferedInputStream bi = new BufferedInputStream(fi);
		한줄로 만들수 있다 
		*/
		
		BufferedInputStream bi = new BufferedInputStream(new FileInputStream(file));
		
		FileOutputStream fo = new FileOutputStream(new File("c.jpg"));
		
		int a = 0;
		while ((a = bi.read()) != -1){
			fo.write(a);
		}
		
		//가장 마지막에 연결한 객체를 가장 먼저 닫자!!
		fo.close();
		bi.close();
	}
}

이 코드는 폴더 안에 a.jpg 파일이 있는 상태에서 실행시켜주세요!

728x90