자바의 파일입출력
1. java.io : 기본 탐색기에서 이루어지는 모든 기능을 클래스로 만들어 놓은 패키지.
       1bit(0,1) * 8 = 8bit = 1byte
             byte 단위 (1byte) 입출력 : 이미지, 영상, 소리 등의 파일을 입출력할 때 사용     일단은 얘가 기준임
             char 문자단위 (2byte) 입출력 : 한문자 단위 및 char[] <=> String         네트워크 전송할 때 이건 잘 안씀
             객체 단위 입출력 : .class 단위로 입출력할 때 사용
             
             파일과 디렉토리를 관리하는 클래스 : File
             
             File의 CRUD 찾아놓을 것 
             C : createTempFile(String prefix, String suffix),  createTempFile(String prefix, String suffix, File directory)
             R : list(), listFiles()
             U : renameTo(파일명이 같은 애의 경로를 옮김)
             D : delete()

 

2. java.nio가 있지만 배우지는 않았다.

 

============================================================================

1. File 클래스가 가진 생성자와 메소드

package com.FileIO;

import java.io.File;

// File 클래스가 가진 생성자와 메소드를 살펴보자.
public class Test01 {
	
	// File(String pathname);
	public static void prn01() {
		File f = new File("c:\\Utest");
		if (f.exists()) {
			System.out.println("이미 경로가 존재함");
		} else {
			f.mkdir();
			System.out.println("지금 만들었음");
		}
	}
	
	// File(String parent, String child);
	public static void prn02() {
		File f = new File("c:\\UTest", "MyTest");
		f.mkdir();
	}
	
	// File(File parent, String child);
	public static void prn03() {
		File parent = new File("c:\\UTest");
		File f = new File(parent, "MyTest02");
		f.mkdir();
	}

	public static void main(String[] args) {
		prn01();
		prn02();
		prn03();
        
		System.out.println(File.pathSeparator );
		System.out.println(File.pathSeparatorChar );
		System.out.println(File.separator );
		System.out.println(File.separatorChar );
		
		String path = "c:" + File.separatorChar + "UTest" + File.separator + "YTest";
		System.out.println(path);
		File fi = new File(path);
		fi.mkdir();
		
	}

}

 

2. 파일위치 변경, 파일/디렉토리 확인

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

public class Test02 {
	public static void disp() {
		File f = new File("c:\\Utest");
		File fi = new File(f, "a.txt");
//		System.out.println(fi);
		try {
			fi.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	// 같은 폴더에 renameTo 해볼 것
	public static void disp02() {
		// 1. Utest 디렉토리에 있는 a.txt를 c:\\test로 이동
		File fi = new File("C:\\Utest\\a.txt");
		fi.renameTo(new File("C:\\Utest\\MyTest\\a.txt"));
	}

	// 지정된 디렉토리의 파일의 개수와 디렉토리 개수를 출력해보자
	public static void disp03() {
		int file_cnt = 0;
		int dir_cnt = 0;

		String path = "C:\\Windows\\System32";
		File file = new File(path);

		// 전체 목록을 File 객체의 배열로 리턴
		File[] file_list = file.listFiles();

		// isXX 메소드를 통해 파일과 디렉토리를 판별
		// 조건에 따라 개수를 계산
		for (File r : file_list) {
			if (r.isFile()) {
				file_cnt++;
				System.out.println("dir : " + r.getName());
			}
			if (r.isDirectory()) {
				dir_cnt++;
				System.out.println("file : " + r.getName());
			}
		}
		System.out.println("전체 개수 : " + file_list.length);
		System.out.println("파일 개수 : " + file_cnt);
		System.out.println("디렉토리 개수 : " + dir_cnt);

	}

	public static void main(String[] args) {
		disp();
		disp02();
		disp03();

	}

}

 

3. 문자단위 파일 입출력

// 1. 문자 단위로 파일 입출력을 하자
public class Test03 {
	public static void MyWrite(File f) throws IOException {
		// false가 default, true를 주면 덮어쓰기 아니고 이어쓰기 됨
		FileWriter fw = new FileWriter(f, true);
		fw.write("ABCDEFG\n");
		fw.append("111111111111\n");
		fw.write("asdfa4asdfasdfasdf\n");

		char[] res = "a95y중간에 한글 되는가d".toCharArray();
		fw.write(res);

		fw.close();
	}

	public static void MyRead(File f) throws IOException {
		FileReader fr = new FileReader(f);
		int ch = 0;

		// 파일의 끝이 -1이 될 때까지 글자를 하나씩 읽어서 ch로 리턴받아 출력하자
		while ((ch = fr.read()) != -1) {
			System.out.printf("%c", (char) ch);
		}

		fr.close();
	}

	public static void main(String[] args) {
		String filename = "Test03.txt";
		File f = new File(filename);
		try {
			MyWrite(f);
			MyRead(f);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

4. byte단위 파일입출력

package com.FileIO;

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

// 2. byte 단위로 파일 입출력을 하자 원래목적은 이미지 영상 소리용임
public class Test04 {
	public static void MyWrite(File f) throws IOException {
		FileOutputStream fos = new FileOutputStream(f);

		for (int i = 65; i < 91; i++) {
			fos.write(i);
		}
		
		String msg = "오늘은 수요일입니다. 배고픕니다.";
		
		fos.write(msg.getBytes());
		fos.close();
	}

	public static void MyRead(File f) throws IOException {
		FileInputStream fis = new FileInputStream(f);
		int ch = 0;

		while ((ch = fis.read()) != -1) {
			System.out.print((char)ch);
		}
		fis.close();

	}

	public static void main(String[] args) {
		File fi = new File("Test04.txt");

		try {
			MyWrite(fi);
			MyRead(fi);
		} catch (IOException e) {
			System.out.println(e);
			e.printStackTrace();
		}
	}

}

 

5. byte단위로 버퍼를 사용해서 입출력

package com.FileIO;

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

// 4. byte 단위로 파일 입출력을 하자 버퍼를 써서
public class Test06 {
	public static void MyWrite(File f) throws IOException {
//		FileOutputStream fos = new FileOutputStream(f);
//		BufferedOutputStream bos = new BufferedOutputStream(fos);

//		OutputStream out = new OutputStream(f);
//		BufferedOutputStream bos = new BufferedOutputStream(out);

		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(f));

		bos.write("한글되나요~".getBytes());

		bos.close(); // bos가 닫힐 때 new FileOutputStream(f) 객체도 같이 닫힘
	}

	public static void MyRead(File f) throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream(f));
		int res = 0;

		while ((res = bis.read()) != -1) {
			System.out.printf("%c", res);
		}
		bis.close();

	}

	public static void main(String[] args) {
		File f = new File("Test06.txt");
		try {
			MyWrite(f);
			MyRead(f);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

+ Recent posts