java-File과stream

ezzange·2022년 8월 31일
0

java

목록 보기
14/16
post-custom-banner

stream

package com.green.fileio;

import java.io.FileWriter;
import java.io.IOException;
public class FileTest01 {
	public static void main(String[] args) throws IOException {
		//바이트 스트림, 문자스트림
	
	//Reader, Writer(문자스트림)
		//출력스트림만 파일이 존재하지 않으면 자동으로 생성 후 처리
		FileWriter fw=new FileWriter("test.txt");//추상클래스라 안된다.
		//예외처리를 안하면 오류가 발생
		//예외처리 : 프로그램이 정상적으로 종료하기 위해 
		//예외처리 대신 main에 throws IOException 추가 
		fw.write('가');
		fw.write('나');
		fw.write("다람쥐\n");
		fw.write("오늘의 주인공은 바로바로바로바로~~\n");
		fw.write("오 수 민~!!!\n");
		fw.close();
		System.out.println("파일 저장 완료되었습니다.");
	
	
	}//main

}//class
파일 저장 완료되었습니다.

만들고 자바 프로젝트 접어서 새로고침후 열면 text.txt파일이 생긴다.

text.txt

가나다람쥐
오늘의 주인공은 바로바로바로바로~~
오 수 민~!!!

File 복사(text )

package com.green.fileio;

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


public class FileCopy {
	
	public static void main(String[] args) throws IOException {
		
		//파일복사
		FileReader fr=new FileReader("input.txt");
		FileWriter fw=new FileWriter("output.txt");
		int data;
		while((data=fr.read()) != -1) {
			fw.write(data);
		}
		//-1은 스트림이 마지막에 도달 했을때의 값
		
		fw.close();
		fr.close();
		System.out.println("파일 복사가 완료되었습니다.");
		
		
		
	}//main

}//class
package com.green.fileio;

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

public class FileTest02 {
	public static void main(String[] args) throws IOException {
		
	

	//읽어주는거 Reader
			FileReader fr=new FileReader("test.txt");
			int data;
			while ((-1!=(data=fr.read()))) {
				System.out.println();
			}
				
			fr.close();
}

}

만들고 자바 프로젝트 접어서 새로고침후 열면 input파일이 생긴다.
이 파일에 텍스트 데이터를 저장하고 다시 실행하면 복사되어 Output파일에 같은 내용이 생김

File 복사(image )

자바 프로젝트 파일안에 이미지 파일을 저장하고 그 이미지를 이클립스 하단으로 출력하기

package com.green.fileio;

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

public class FileCopy02 {
	public static void main(String[] args) throws IOException {
		
		FileInputStream fis= new FileInputStream("다운로드.jpg");
		FileOutputStream fos =new FileOutputStream("다운로드_copy.jpg");
		
		
		
		int data;
		//while 파일 한글자만 읽지말고 끝까지 다읽으라고 넣는다.
		while((data=fis.read()) != -1) {
			fos.write(data);
		}
		
		fis.close();
		fos.close();
		System.out.println("완료");
	}
}
package com.green.fileio;

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

public class FileTest02 {
	public static void main(String[] args) throws IOException {
		
	

	//읽어주는거 Reader
			FileReader fr=new FileReader("test.txt");
			int data;
			while ((-1!=(data=fr.read()))) {
				System.out.println();
			}
				
			fr.close();
}

}

다음과 같이 이미지가 복사되어 출력된다.

File저장

로또번호를 키보드로 입력받아 파일에 저장하기

package com.green.lotto;

import java.io.IOException;

public class MyLotto645 {
	public static void main(String[] args) throws IOException {
		Lotto lotto=new Lotto();
		lotto.run();//메서드 호출
	}

}
package com.green.lotto;

import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
import java.util.Scanner;

public class Lotto {
	int no;
	LocalDate date;
	int[] nums=new int[7];
	
	public int getNo() {
	return no;
	}
	public void setNo(int no) {
		this.no=no;
	}
	public LocalDate getDate() {
		return date;
	}
	public void setData(LocalDate date) {
		this.date=date;
	}
	public int[] getNums() {
		return nums;
	}
	public void setNums(int[] nums ) {
		this.nums=nums;
	}
	Scanner in=new Scanner (System.in);
	public void run() throws IOException {
		// TODO Auto-generated method stub
		
		
		while(true) {
			displayMenu();
			int menuNo = in.nextInt();
			process(menuNo);
			}//in.close;
	}	
	private void process(int menuNo) throws IOException {
		switch(menuNo) {
			case 1://번호등록
				inputNum();
				break;
			case 2:
				displayList();
				break;
			case 3:
				analysus();
				break;
			case 4:
				System.out.println("프로그램을 종료합니다.");
				System.exit(0);//0은 정상적으로 프로그램 종료 
				break;
				default:
					System.out.println("잘못 입력 하셨습니다. ");
			
		}
	}
	private void analysus() {
		// TODO Auto-generated method stub
		System.out.println("AI가 번호를 분석을 진행중입니다.");
	}
	String fileName="lotto.dat";
	private void displayList() throws IOException {
		// TODO Auto-generated method stub
		System.out.println("리스트를 출력합니다. ");
		FileReader fr=new FileReader(fileName);
		int data;				//'\n'이것은 한줄만 출력할때
		while((data=fr.read())!= -1) {
			System.out.print((char)data);
			
		}
		
		fr.close();
	}
	
	private void inputNum() throws IOException {
		// TODO Auto-generated method stub
		System.out.println("등록처리를 실행합니다.");
		// 키보드로 입력 받아서 내용을 파일에 저장
		
		System.out.println("등록할 회차를 입력하십시오.");
		System.out.print("입력 > ");
		no=in.nextInt();//회차번호
		System.out.println("추첨날짜 8자리를 입력하십시오ex)20220831");
		System.out.println("입력 > ");
		int inDay=in.nextInt();
		
		int year = inDay/10000; //20220831 -> 2022
		int month = inDay%10000/100; //20220831 -> 8
		int dayOfMonth = inDay%100;//20220831 -> 31 
		date=LocalDate.of(year, month, dayOfMonth);
		System.out.println(date);
		nums=new int[7];//로또번호6 +보너스1
		for(int i=0; i<6; i++) {
			System.out.println(i+1+"번째 로또 번호를 입력하십시오.");
			System.out.print("입력 > ");
			nums[i]=in.nextInt();
		}
		System.out.println("보너스 번호를 입력하십시오.");
		System.out.print("입력 > ");
		nums[nums.length-1]=in.nextInt();
		//파일에 저장해보자!
		/*
		FileWriter fw=new FileWriter("lotto.dat",true);
		String str=no+" "+date+" ";
			for(int i=0; i<6; i++) {
				str+=nums[i]+" ";
			}
		str+=nums[6]+"\n";
		fw.write(str);
		fw.flush();//출력스트림에만 존재
		fw.close();
	}
	*/
		//다시 파일을 저장해보자!
		FileOutputStream fos = new FileOutputStream(fileName);
		DataOutputStream dos = new DataOutputStream(fos);
		dos.writeInt(no);
		dos.writeUTF(date.toString());
		for(int num:nums) {
			dos.writeInt(num);
		}
		
		dos.close();
		fos.close();
	}
		
	private void displayMenu(){
		System.out.println("\n________________________");
		System.out.println("1.등록 2.리스트 3.분석 4.종료");
		System.out.println("=====메뉴를 선택하세용가리=====");
		System.out.println("________________________");
		System.out.println("선택 > ");
	}
}//class
post-custom-banner

0개의 댓글