코드 그라데이션

후발대 22일차(2), 23일차 설명 추가 (파일 입출력 이론) 본문

Java/후발대

후발대 22일차(2), 23일차 설명 추가 (파일 입출력 이론)

완벽한 장면 2023. 4. 21. 00:07

_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
Comments