[파일 입출력]
- 자바에서 단독으로 하는 경우는 없다.
- 파일 다운로드, 이미지 업로드 기능을 구현할 때 필요한 내용.
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 |