[LOL 자유랭크 분석] #3. 텍스트 파일 수정하기

[LOL 자유랭크 분석] #3. 텍스트 파일 수정하기

#2 https://fatshark.tistory.com/5 에서 만든 명령어에다 실제로 Members.txt에 접근해 소환사 이름을 추가하거나 삭제하는 기능을 넣었다. try-catch문을 정확히 언제 사용해야 하는지 몰라서 여러 개를 덕지덕지 기워놓은 모양이다.

검색한 내용+알게 된 내용

1. FileWriter는 파일 경로만 넣어주면 false가 디폴트로 들어가는데 파일을 새로 쓰는 게 아니라 기존 파일에 추가할 내용이 있을 때는 FileWriter(File, true)를 해줘야 한다.

2. String은 ==으로 비교할 수 없고 String.equals(String)으로 비교해야 한다.

3. reader는

은 안 읽는다.

아직 모르는 점

1. 원래 #2의 코드는 따로 두고 새 파일에다 코드를 짜려고 했는데, 다른 파일에 있는 변수나 코드를 활용하는 법을 모르겠다.

2. #1과 #2의 코드를 많이 가져다 썼는데 모르는 점은 하나도 해결을 안했다.

3. 내가 쓴 코드와 같은 기능을 가진 더 짧고 예쁜 코드가 있는지는 어떻게 알 수 있을까?

import java.io.*; import java.util.Scanner; public class Command { public static void main(String[] args) { String command; //명령어 입력받음 Scanner sc = new Scanner(System.in); while(true) { System.out.println("명령어를 입력하세요.(Add, Delete, Close)"); command = sc.next(); File f; switch(command) { //새 멤버 추가 case "Add": case "add": System.out.println("추가할 멤버의 소환사 이름을 입력하세요."); sc.nextLine(); String addName = sc.nextLine(); f = new File("Members.txt"); try( FileWriter fw = new FileWriter(f, true); BufferedWriter bw = new BufferedWriter(fw); FileReader fr = new FileReader(f); BufferedReader br = new BufferedReader(fr); ) { bw.write(addName + "

"); bw.close(); String readline = null; while( ( readline = br.readLine() ) != null ) { System.out.println(readline); } } catch(IOException e) { System.out.println(e.toString()); } continue; //기존 멤버 삭제 case "Delete": case "delete": System.out.println("제외할 멤버의 소환사 이름을 입력하세요."); sc.nextLine(); String deleteName = sc.nextLine(); f = new File("Members.txt"); try( FileReader fr = new FileReader(f); BufferedReader br = new BufferedReader(fr); ) { String dummy =""; String readline = null; while( (readline = br.readLine()) != null ) { if(readline.equals(deleteName)) {continue;} dummy += readline; dummy += "

"; } try( FileWriter fw = new FileWriter(f); BufferedWriter bw = new BufferedWriter(fw); ) { fw.write(dummy); fw.close(); System.out.println(dummy); } catch(IOException e) { System.out.println(e.toString()); } } catch(IOException e) { System.out.println(e.toString()); } continue; //파일 종료 case "Close": case "close": break; default: System.out.println("존재하지 않는 명령어입니다."); System.out.println("명령어를 입력하세요.(Add, Delete, Close)"); command = sc.next(); continue; } sc.close(); break; } } }

from http://fatshark.tistory.com/6 by ccl(A) rewrite - 2021-12-24 22:02:02