본문 바로가기

Java

[210831] [exam15] 문자 기반 파일 입출력

public class Sample3 {

	public static void main(String[] args) {
		// 문자 기반 파일 입출력
		// 문자가 저장된 텍스트 파일에 대한 읽기 쓰기 작업에 적합 (이미지 X) 
									
		try {					//여기선 String(문자열)으로 
			FileWriter fw = new FileWriter("./filewriter.txt");
			fw.write("파일 쓰기 작업을 진행합니다."); //write도 문자열로 선택해서 바로 적음
			fw.close();
		} catch (IOException e) {
			System.out.println("파일 출력 스트림 생성에 문제가 발생하였습니다.");
		}

		try {
			FileReader fr = new FileReader("./filewriter.txt");		
			//파일 리더에 커서 올려서 예외처리 뭐필요한지 봐 파일낫익셉션임 생성해~!
			
			//fr.read();//문자배열(=문자열) 버퍼(char[] cbuf) 이용하는걸로 써보겠음			
			char[] cArr = new char[8];	//문자배열, 반복문 써야 함
			StringBuffer sb = new StringBuffer();		//몬지1도모르겠음 어펜드랑
			while(true) {
				int res = fr.read(cArr);//문자배열을 넘겨줌으로 인해서 8바이트씩 읽게 됨, 읽은바이트만큼 문자배열에 저장
				if(res == -1) {			//배열안 문자 한개당 1바이트니까
					break;				//int res에 읽은 바이트 저장되는데 -1은 읽은 게
				}						//없는 거임
				sb.append(cArr, 0, res);//cArr의 0번 인덱스부터 읽은 바이트 수(res)만큼
			}							//스트링 버퍼에 추가하라
			System.out.println(sb);		//추가 다 된 스트링버퍼를 읽음
			fr.close();					
		} catch (FileNotFoundException e) {
			System.out.println("읽기 작업을 수행할 파일을 찾을 수 없습니다.");
		} catch (IOException e) {
			System.out.println("읽기 작업중 문제가 발생하였습니다.");
		}
	}

}

문자 기반 버퍼 보조 스트림 활용

 

public class Sample4 {
	
	public static void main(String[] args) {
		// 문자 기반 입출력 + 버퍼 보조 스트림
		try {					
			FileWriter fw = new FileWriter("./filewriter.txt");
			BufferedWriter bw = new BufferedWriter(fw);
			bw.write("파일 쓰기 작업을 진행합니다."); 
			bw.close();
		} catch (IOException e) {
			System.out.println("파일 출력 스트림 생성에 문제가 발생하였습니다.");
		}

		try {
			FileReader fr = new FileReader("./filewriter.txt");		
			//파일 리더에 커서 올려서 예외처리 뭐필요한지 봐 파일낫익셉션임 생성해~!
			BufferedReader br = new BufferedReader(fr);
			
			//fr.read();//문자배열(=문자열) 버퍼(char[] cbuf) 이용하는걸로 써보겠음			
			char[] cArr = new char[8];	//문자배열, 반복문 써야 함
			StringBuffer sb = new StringBuffer();		//몬지1도모르겠음 어펜드랑
			while(true) {
				int res = br.read(cArr);//문자배열을 넘겨줌으로 인해서 8바이트씩 읽게 됨 
				if(res == -1) {			//배열안 문자 한개당 1바이트니까
					break;				//int res에 읽은 바이트 저장되는데 -1은 읽은 게
				}						//없는 거임
				sb.append(cArr, 0, res);//cArr의 0번 인덱스부터 읽은 바이트 수(res)만큼
			}							//스트링 버퍼에 추가하라
			System.out.println(sb);		//추가 다 된 스트링버퍼를 읽음
			br.close();	  // br로 쓰지만
			fr.close();   // fr는 여전히 닫아주고 
		} catch (FileNotFoundException e) {
			System.out.println("읽기 작업을 수행할 파일을 찾을 수 없습니다.");
		} catch (IOException e) {
			System.out.println("읽기 작업중 문제가 발생하였습니다.");
		}
	
		// 바이트 기반 입출력 스트림 + 버퍼 보조 스트림
		try {
			File f = new File("./fileoutput.txt");
			FileOutputStream fos = new FileOutputStream(f);
			BufferedOutputStream bos = new BufferedOutputStream(fos); 
			
			byte[] bArr = new byte[] {65, 66, 67, 68, 69};
			
			bos.write(bArr);
			bos.close();
			fos.close();
		} catch (FileNotFoundException e) {
			System.out.println("파일 출력 스트림에 문제가 발생하였습니다.");
		} catch (IOException e) {
			System.out.println("파일 쓰기 작업에 문제가 발생하였습니다.");
		}
		
		try {
			File f = new File("./fileoutput.txt");
			FileInputStream fis = new FileInputStream(f);
			BufferedInputStream bis = new BufferedInputStream(fis);
			
			char[] text = new char[0];
			while(true) {
				int r = bis.read();
				if(r == -1) {
					break;
				}
				char[] temp = new char[text.length + 1];
				System.arraycopy(text, 0, temp, 0, text.length);
				temp[temp.length - 1] = (char)r;
				text = temp;
			}
			System.out.println(text);
			bis.close();
			fis.close();
		} catch (FileNotFoundException e) {
			System.out.println("파일 입력 스트림에 문제가 발생하였습니다.");
		} catch (IOException e) {
			System.out.println("파일 읽기 작업에 문제가 발생하였습니다.");
		}
	}
		

}