Tiny Bunny [JAVA] 파일 입출력 - 솜님의 블로그
솜님의 블로그
카테고리
작성일
2024. 7. 28. 22:38
작성자
겨울솜사탕

[파일 입출력]

- 자바에서 단독으로 하는 경우는 없다.

- 파일 다운로드, 이미지 업로드 기능을 구현할 때 필요한 내용.

 

PC와 프로그램의 상호작용

내가 경로를 알 수 있는 폴더에 텍스트 파일을 만들어주고, 이클립스에 주석으로 해당 폴더의 경로를 적어준다.

(나중에 찾기 쉽도록! == 효율성을 위해서)

 

package class01;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;


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

		// 파일 경로
		String filePath = "D:\\SDS\\workspace\\day020\\src\\class01\\";

		// 파일명
		String fileName = "study.txt";
		
        // fileReader에 파일 경로 + 파일명을 입력해주어야 하므로
        // 별도로 변수 선언하여 작성해줌.

		FileReader fileReader;
		String line = "";
		try {
			// 파일을 찾아오는 객체
			// 파일을 찾아올 수 없을 수 있으니 try-catch문 작성
			fileReader = new FileReader(filePath + fileName);
			// 파일에 대한 내용을 받아오는 객체
			BufferedReader reader = new BufferedReader(fileReader);

			// 파일의 내용일 한줄씩 읽어오는 변수
			line = reader.readLine();

		} catch (FileNotFoundException e) {
			System.out.println("파일명이 올바르지 않습니다!");
		} catch (IOException e) {
			System.out.println("입출력 과정 중 에러가 발생했습니다.");
		}

		// 자료형 변환(타입캐스팅)을 담당하는 클래스
		// == Wrapper 클래스
		// 위에서 읽어온 파일의 내용을 변수에 저장
		int ansNum = Integer.parseInt(line);
		
		
		// 1~50까지의 정수를 받아와 UPDOWN 게임
		int startNum = 1;
		int endNum = 50;
		Scanner sc= new Scanner(System.in);
		while(true) {
			System.out.println(startNum + " ~ " + endNum + "중에서 정수 입력 >>");
			
			int num = sc.nextInt();
			
			if(ansNum < num) {
				System.out.println("DOWN");
				endNum=num-1;
			}
			else if(ansNum > num) {
				System.out.println("UP!");
				startNum=num+1;
			}
			else { //사용자가 정답을 맞췄을 때
				break;
			}
		}
		System.out.println("정답입니다! :D");
		
	}
}

 

String fileName= "파일명.확장자명" 작성해 줄 경우 확장자를 반드시 작성해주어야 함.

그렇지 않으면 FileNotFound가 발생함.

 

 

해당 경로의 파일에 글 작성하기

 

package class01;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

//글쓰기
public class Test002 {
	public static void main(String[] args) {
		
		// 파일 경로
		String filePath = "D:\\SDS\\workspace\\day020\\src\\class01\\";
		// 파일명
		String fileName = "study.txt";
		
		// 사용자 이름 입력받기
		Scanner sc = new Scanner(System.in);
		System.out.println("사용자 이름 입력 >> ");
		String name = sc.next();
		int cnt = 3;
		
		FileWriter fileWriter;
		try {
			// 내용을 작성할 파일 경로와 파일명을 인자값으로 작성
			fileWriter = new FileWriter(filePath+fileName);
			
			// 해당 파일을 읽어오기 위한 객체 생성
			BufferedWriter writer = new BufferedWriter(fileWriter);
			
			// 읽어온 파일에 내용 작성
			writer.write(name + "님이 " + cnt + "번만에 정답을 맞추셨습니다! :D");
			// 닫아주기!
			writer.close();
			
		} catch (IOException e) {
			System.out.println("파일 입출력 에러가 발생했습니다!");
		}
		
		
		
	}
	
}

 

 

 

이미지 파일 복사하기

package class02;


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

//사진 복사하기
public class Test02 {

	public static void main(String[] args) {

		// 실습2
		// 이미지.jpg(이미지.png) 파일을 복사해서 
		// 이미지2.jpg(이미지2.png)를 생성해주세요!

		// 원본 이미지 파일이 있는 경로
		String filePath = "D:\\SDS\\workspace\\day020\\src\\class01\\";
		// 원본 이미지 파일의 이름
		String originalFileName = "PHOTO.jpg";
		// 복사본 이미지 파일 저장할 이름
		String copyFileName = "image_copyTest.jpg";


		try {
			// 원본 이미지 파일 읽어오기 준비
			FileInputStream fis = new FileInputStream(filePath+originalFileName);
			// 복사본 이미지 파일 쓰기위한 준비
			FileOutputStream fos = new FileOutputStream(filePath+copyFileName);

			// 파일을 읽을 때 한 번에 1024 바이트씩 읽기 위한 준비
			byte[] buffer = new byte[1024];

			// 실제로 읽은 바이트 수를 더하기 위한 변수 선언
			int content;

			// buffer 사이즈만큼 input 데이터를 읽어서 output에 쓴다
			// buffer로 읽은 총 byte 수가 리턴된다.
			// 파일 끝에 도달하여 더 이상 읽을 데이터가 없을 경우 -1이 리턴되기 때문에
			// -1이 아닌 경우 반복
			while((content = fis.read(buffer)) != -1) {
            	// read() 메서드를 사용하라고 안내를 받았는데,
                // fis로부터 fos 작성을 할거야~ 라는 뜻
				fos.write(buffer, 0, content);
			}
			// 파일 출력 스트림 닫기
			// 모든 쓰기 작업 완료
			fos.close();
		}
		catch (IOException e) {
			System.out.println("오류 발생!");
		}


	}

}

 

 

 

'JAVA > java' 카테고리의 다른 글

[JAVA] Stack  (0) 2024.11.22
[JAVA] 웹 크롤링  (0) 2024.08.04
[JAVA] thread  (0) 2024.07.26
[JAVA] 예외 처리  (0) 2024.07.26
[JAVA] 결합도와 응집도  (1) 2024.07.25