코드 그라데이션
후발대 22일차(2), 23일차 설명 추가 (파일 입출력 이론) 본문
_01.Input (입력)
package Prac22;
import java.util.Scanner;
public class _01_Input {
public static void main(String[] args) {
// 사용자 입력
Scanner sc = new Scanner(System.in);
System.out.print("이름을 입력하세요 : ");
String name = sc.next();
System.out.print("혈액형을 입력하세요 : ");
String bloodType = sc.next();
System.out.print("키를 입력하세요 : ");
int height = Integer.parseInt(sc.next());
// int height = sc.nextInt();
System.out.print("몸무게를 입력하세요 : ");
double weight = Double.parseDouble(sc.next());
// double weight = sc.nextDouble();
System.out.println("==================================");
System.out.println("입력하신 정보는 다음과 같습니다.");
System.out.println("이름 : " + name);
System.out.println("혈액형 : " + bloodType);
System.out.println("키 : " + height);
System.out.println("몸무게 : " + weight);
System.out.println();
System.out.println("=====================");
System.out.println("무슨 프로그래밍 언어를 배웠나요? > ");
String lang = sc.next(); // 한 단어
System.out.println("언어 : " + lang);
sc.nextLine(); // 불필요한 문장을 삭제, 버퍼를 비워줌.
System.out.println("배우고 나니 기분이 어땠나요? > ");
// String feeling = sc.next(); // 띄어쓰기로 구분해서 값을 얻어온다.
// 한 줄 통째로 받아오기
String feeling = sc.nextLine();
System.out.println("기분 : " + feeling);
}
}
(_02는 없음)
_03.File (파일)
package Prac22;
import java.io.File;
import java.io.IOException;
public class _03_File {
public static void main(String[] args) {
// 새로운 파일을 만들고 그 파일의 정보를 얻어오는 작업
String fileName = "text.txt";
File file = new File(fileName); // 괄호 속에는 만들고자 하는 경로
try {
file.createNewFile(); // 실행하게 되면 파일이 생성!!!
if(file.exists()) { // 정보 얻어오기
System.out.println("파일 이름 : " + file.getName());
System.out.println("파일 절대 경로 : " + file.getAbsolutePath());
System.out.println("파일 크기 (Byte) : " + file.length()); // 현재는 아무것도 없으므로 0.
}
} catch (IOException e) {
throw new RuntimeException(e);
}
// throws IOException 이렇게 메서드 옆에 붙일 수도 있고, try-catch로 감쌀 수도 있다.
}
}
_04.Folder (폴더)
package Prac22;
import java.io.File;
public class _04_Folder {
public static void main(String[] args) {
String folderName = "A";
File folder = new File(folderName); // 파일과 절차 같음.
folder.mkdir(); //make directory => A 라는 이름의 폴더가 생성됨.
if(folder.exists()) {
System.out.println("폴더가 존재합니다. : " + folder.getAbsolutePath());// 절대경로 가져오기
// 실행하면 폴더 생성됨!!!
}
System.out.println("---------------------");
System.out.println("---------------------");
// 중첩으로 폴더 만들기 시도(하위폴더)
folderName = "A/B/C";
// "A" + File.separator + "B" + File.separator + "C" 이게 제대로 구분되는 방법;
folder = new File(folderName); // 파일과 절차 같음.
//folder.mkdir();
// 윈도우 : C:\\Users\\hbd\\Desktop 형태로 만들어짐.
// 그냥 이렇게만 쓰면 폴더 안 만들어지더라.
// 그래서!!!
folder.mkdirs();
if(folder.exists()) {
System.out.println("폴더가 존재합니다: " + folder.getAbsolutePath());
} else {
System.out.println("폴더 생성 실패 (nkdir)");
}
}
}
/*
왜 실패할까??
폴더에 상위폴더가 있는 상태에서는 내가 만들려는 Folder 하나는 만들 수가 있는데,
여러개는 만들 수 없다.
그래서 mkdirs라는 명령어를 대신 쓴다.
*/
_05.FileAndFolder (파일과 폴더)
package Prac22;
import java.io.File;
public class _05_FileAndFolder {
public static void main(String[] args) {
// 여러 목록들을 가지고 와서 이게 파일인지 폴더인지를 구분하는 것을 해볼게요.
// String folder = "."; // 현재 위치를 의미 이건 상대 경로
// 절대경로로 변경 => 폴더 아이콘 우클릭 해서 경로/참조 복사
String folder = "C:\\Users\\eui44\\OneDrive\\바탕 화면\\메가It\\추가공부\\후발대\\Java_park\\src\\Prac22";
File filesAndFolders = new File(folder);
System.out.println("현재 폴더 경로 : " + filesAndFolders.getAbsolutePath());
// for 반복문을 통해서 이 폴더의 목록과 하위폴더를 가지고 올 수 있다.
for (File file : filesAndFolders.listFiles()) { // 모든 폴더와 파일 정보를 다 가지고 옴.listFiles()
if (file.isFile()) { // 파일인지를 구분
System.out.println("(파일) " + file.getName());
} else if (file.isDirectory()) { // 폴더인지를 구분
System.out.println("(폴더) " + file.getName());
}
}
}
}
_06.ReadWriteFile (파일 읽기와 쓰기)
_06_1. 쓰기
package Prac22;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class _06_1_WriteFile {
public static void main(String[] args) {
/*
우리가 프로그래밍을 할 때,
새로운 파일을 만들어서 거기에 내용입력을 하고,
파일에서 내용을 불러와서 코드 내에서 값을 사용할 수 있다.
*/
// BufferedReader : 파일에서 내용을 읽어올 때
// BufferedWriter : 파일에 내용을 쓸때
// Bufferd : 데이터를 한 곳에서 다른 곳으로 보낼 때, 잠시동안 보관하는 장소 개념.
// 마트에서 물건을 가져올 때 하나씩 들고오는 것보다 카드 사용이 더 효율적. 가져오는 카트 역할이 버퍼.
// FileWriter fw = new FileWriter("goodjob.txt");
// BufferedWriter bw = new BufferedWriter(fw); 이렇게 쓰는 게 정석
// 이렇게 바꿈. BufferedWriter bw = new BufferedWriter(new FileWriter("goodjob.txt")); // 예외처리 감싸기
try(BufferedWriter bw = new BufferedWriter(new FileWriter("goodjob.txt", true))) { //append 하고싶으면 true추가
// 이렇게 하면 try구문이 끝날 때 자동으로 bw.close()를 호출해줌.
bw.write("1. 이제 거의 끝이 보여요."); // 기본적으로 수정하면 원래 있던 문장 사라지고 덮어쓰기 됨.
bw.newLine(); // 줄바꿈
bw.write("2. 여기까지 오신 여러분들 정말 대단해요!");
bw.newLine();
bw.write("3. 조금만 더 힘내요!");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
_06_2. 읽기
package Prac22;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class _06_2_ReadFile {
// 파일 읽기
// 기본적으로 쓰기와 비슷함. 매우
public static void main(String[] args) {
// 파일 읽기
try (BufferedReader br = new BufferedReader(new FileReader("goodjob.txt"))) {
// 파일에 있는 줄 단위로 한줄씩 한줄씩 끝까지 불러오면 끝.
String line;
while ((line = br.readLine()) != null) { // 버퍼드리더를 통해 한 줄을 불러오고 그것을 line 변수에 저장.
System.out.println(line);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
_07.DeleteFile (파일 삭제)
package Prac22;
import java.io.File;
public class _07_DeleteFile {
public static void main(String[] args) {
File file = new File("goodjob.txt"); //괄호 안에는 삭제하고 싶은 파일명
file.delete(); // 삭제됨
// 여전히 존재하는지 확인
if (file.exists()) { //있느냐 없느냐
if (file.delete()) {
System.out.println("파일 삭제 성공 : " + file.getName());
} else {
System.out.println("파일 삭제 실패 : " + file.getName()); // 없을 때는아무것도 출력 x
}
}
File folder = new File("A"); // 처음에이러면 폴더 삭제 실패 나온다. 왜? 하위 폴더가 존재하고 있어서
// 메서드 구현 하고 나면
// 그래서 명령어를 정확하게 써줘야 함.
// File folder = new File("A/B/C"); // C폴더를 지우는 것 삭제 바로 가능(가장 하위 폴더)
if (folder.exists()) {
if (folder.delete()) {
System.out.println("폴더 삭제 성공 : " + folder.getAbsolutePath());
} else {
System.out.println("폴더 삭제 실패 : " + folder.getAbsolutePath());
}
}
deleteFolder(folder);
//deleteFolder(folder);
if (deleteFolder(folder)) {
System.out.println("*폴더 삭제 성공 : " + folder.getAbsolutePath());
} else {
System.out.println("*폴더 삭제 실패 : " + folder.getAbsolutePath());
}
}
//타고 들어오는 과정~
// deleteFolder(A)
// deleteFoler(B)
// deleteFolder(c)
// 이렇게 처리된다.
// C.delete() 삭제
// B.delete() 삭제
// A.delete() 삭제
// 가장 안쪽에 있는 것부터 바깥으로 삭제.
// 한꺼번에 지우는 것은 메서드를 활용
// 재귀함수 활용
public static boolean deleteFolder(File folder) {
if(folder.isDirectory()) {
for (File file : folder.listFiles()) { //폴더 안에 있는 모든 목록을 가져오게 됨.
deleteFolder(file); // 우리가 전달받은 것이 디렉토리인 경우 처리 완료
}
}
System.out.println("삭제 대상 : " + folder.getAbsolutePath());
return folder.delete();
}
}
-
728x90
'Java > 후발대' 카테고리의 다른 글
후발대 24일차 (1) 파일 입출력 퀴즈 설명 추가 (0) | 2023.05.10 |
---|---|
후발대 24일차(마지막) 전체 코드 (0) | 2023.04.21 |
후발대 22일차(2), 23일차 전체 코드 (0) | 2023.03.19 |
후발대 22일차 설명 추가(thread) (0) | 2023.03.08 |
후발대 22일차 Quiz (0) | 2023.03.07 |
Comments