CS Study/Java

12. 파일 스트림

Ryannn 2022. 4. 7. 16:18

1. 파일에 데이터 입력/ 출력 / 복사하기

import java.util.Scanner;
import java.io.FileWriter;
import java.io.IOException;
import java.io.FileReader;
import java.io.File;
public class Assign {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);

		FileWriter fout = null;
		FileWriter fout2 = null;
		fout2 = new FileWriter("c:\\Users\\cdsjw\\Desktop\\대학\\1-2\\컴퓨터 프로그래밍II\\1204\\홍길동2.txt");
		while (true) {
			System.out.print("입력>> ");
			int num = scan.nextInt();
			switch(num) {
			case 1:
			
				fout = new FileWriter("c:\\Users\\cdsjw\\Desktop\\대학\\1-2\\컴퓨터 프로그래밍II\\1204\\홍길동.txt");
				System.out.print("데이터 입력>> ");
				String line = scan.next();
				fout.write(line, 0, line.length());
				fout.close();
				break;
				
			
			case 2:
				FileReader fin = new FileReader ("c:\\\\Users\\\\cdsjw\\\\Desktop\\\\대학\\\\1-2\\\\컴퓨터 프로그래밍II\\\\1204\\\\홍길동.txt");
				int c;
				while((c = fin.read()) != -1) {
					System.out.print((char)c);
				}
				System.out.println();
				fin.close();
				break;
			case 3:
				File src = new File("c:\\Users\\cdsjw\\Desktop\\대학\\1-2\\컴퓨터 프로그래밍II\\1204\\홍길동.txt");
				File dest = new File("C:\\Users\\cdsjw\\Desktop\\대학\\1-2\\컴퓨터 프로그래밍II\\1204\\홍길동2.txt");
				int m;
				try {
					FileReader fr = new FileReader(src);
					FileWriter fw = new FileWriter(dest);
					while( (m = fr.read() ) != -1) { // 문자 하나 읽고
						fw.write( (char)m ); // 문자 하나 쓰기
					}
					fr.close();
					fw.close();
					System.out.println("파일 복사 완료!");
					} 
				catch (IOException e){
				System.out.println("파일 복사 오류"); 
				}
				break;
			default :
				System.out.println("프로그램 끝!");
				return;
				
				
				
				
				
				
			}
		}

	}

}

2. 파일에 데이터 입력하기

import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Test {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		Scanner scanner = new Scanner(System.in);
		FileWriter fout = null;
		fout = new FileWriter("C:\\Users\\cdsjw\\Desktop\\대학\\1-2\\컴퓨터 프로그래밍II\\1204//Test3.txt");
		while(true) {
			System.out.print("입력>> ");
			String line = scanner.nextLine();
			if(line.length()==0) {
				break;
			}
			fout.write(line,0,line.length());
			fout.write("\n\n",0,2);
		}
		fout.close();
		scanner.close();

	}

}

3. 파일 인코딩하기

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FileInputStream fin = null;
		InputStreamReader in = null;
		try {
			fin = new FileInputStream("C:\\\\Users\\\\cdsjw\\\\Desktop\\\\대학\\\\1-2\\\\컴퓨터 프로그래밍II\\\\1204\\Test3.txt");
			in = new InputStreamReader(fin, "US-ASCII");
			int c;
			System.out.println("인코딩 문자 집합 : "+ in.getEncoding());
			while ((c = in.read())!=-1) {
				System.out.print((char)c);
			}
			in.close();
			fin.close();
		}
		catch(IOException e ) {
			System.out.println("입출력 오류");
		}
		

	}

}

4. 파일에 byte자료형 배열 저장하기

import java.io.FileOutputStream;
import java.io.IOException;
public class Test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte b[] = {7,33,3,4,-1,18};
		try {
			FileOutputStream fout = new FileOutputStream("C:\\\\\\\\Users\\\\\\\\cdsjw\\\\\\\\Desktop\\\\\\\\대학\\\\\\\\1-2\\\\\\\\컴퓨터 프로그래밍II\\\\\\\\1204//Test3.out.txt");
			for (int i = 0; i<b.length;i++) {
				fout.write(b[i]);
			}
			fout.close();
		}
		catch (IOException e) {
			System.out.println("저장 불가! 경로 확인!");
			return;
		}
		System.out.println("저장 성공!");
		
		
		

	}

}

5. 파일 데이터를 byte 자료형 배열로 받아들이기

import java.io.FileInputStream;
import java.io.IOException;
public class Test5 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte b[] = new byte[6];
		try {
			FileInputStream fin = new FileInputStream("C:\\\\\\\\\\\\\\\\Users\\\\\\\\\\\\\\\\cdsjw\\\\\\\\\\\\\\\\Desktop\\\\\\\\\\\\\\\\대학\\\\\\\\\\\\\\\\1-2\\\\\\\\\\\\\\\\컴퓨터 프로그래밍II\\\\\\\\\\\\\\\\1204//Test3.out.txt");
			int n=0,c;
			while ((c = fin.read())!=-1) {
				b[n] = (byte) c;
				n++;
			}
			for (int i = 0;i<b.length;i++) {
				System.out.print(b[i]+" ");
			}
			fin.close();
		
		}
		catch (IOException e) {
			System.out.println("파일 읽기 오류! 경로 확인!");
		}
		

	}

}

6. BufferedReader로 파일 데이터 받아들이기

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test6 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileInputStream file = new FileInputStream("C:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Users\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\cdsjw\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Desktop\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\대학\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\1-2\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\컴퓨터 프로그래밍II\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\1204//Test3.out.txt");
		BufferedReader in = new BufferedReader(new InputStreamReader(file,"UTF-16"));
		String str;
		while((str = in.readLine())!=null) {
			System.out.println(str);
		}

	}

}

7. 파일 복사하기 - FileReader/FileWriter 활용

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Test8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File src = new File("c:\\windows\\system.ini");
		File dest = new File("c:\\JAVA\\system.txt");
		int c;
		try {
			FileReader fr = new FileReader(src);
			FileWriter fw = new FileWriter(dest);
			while ((c=fr.read())!=-1) {
				fw.write((char)c);
			}
			fr.close();
			fw.close();
			System.out.println(src.getPath()+"틀"+dest.getPath()+"로 복사함");
		}
		catch (IOException e) {
			System.out.println("파일 복사 오류");
		}

	}

}

8. 파일 복사하기 - FileStream 활용

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test9 {
	public static void main(String[] args) {
		File src = new File("c:\\Windows\\Web\\Wallpaper\\Theme1\\img1.jpg");
		File dest = new File("copyimg.jpg");
		int c;
		try {
			FileInputStream fi = new FileInputStream(src);
			FileOutputStream fo = new FileOutputStream(dest);
			byte [] buf = new byte [1024*10]; // 10KB 버퍼
			while(true) {
				int n = fi.read(buf); // 버퍼(buf)로 읽어옴(n은 실제 읽은 바이트)
				fo.write(buf, 0, n); // buf[0]부터 n 바이트 쓰기
				if (n < buf.length) break;
			}
			fi.close();
			fo.close();
			System.out.println(src.getPath()+ "를 " + dest.getPath()+ "로 복사함");
		} 
		catch (IOException e) {
			System.out.println("파일 복사 오류"); 
		} 
	} 
}