package com.kh.practice.file.model.dao;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
public class FileDAO {
public boolean checkName(String file) {
// 존재하는 파일이 있는지 확인 후 반환
// File 객체를 생성하는 매개변수 있는 생성자에 file을 매개변수로 넘겨줌
// 해당 파일이 있는지 없는지에 대한 boolean 값을 반환
// boolean isTrue = false;
//
// File f = new File(file);
//
// if(f.isFile()) {
// isTrue = true;
// }
// return isTrue;
// 강사님 풀이
try(FileReader fw = new FileReader(file);) {
} catch(FileNotFoundException e) {
// e.printStackTrace();
return false;
} catch(IOException e1) {
e1.printStackTrace();
}
return true;
}
public void fileSave(String file, String s) {
// 매개변수로 받은 파일 명에 문자열 저장
try(DataOutputStream dos = new DataOutputStream(new FileOutputStream(file, true))) {
dos.writeUTF(s);;
} catch(IOException e) {
e.printStackTrace();
}
}
public StringBuilder fileOpen(String file) {
// 매개변수로 받은 파일 명을 이용하여 저장되어 있는 데이터 반환
StringBuilder sb = new StringBuilder();
try(DataInputStream dis = new DataInputStream(new FileInputStream(file))) {
// 파일에 null 값이 들어갈 수도 있기 때문에 null 체크
String s = "";
while((s=dis.readUTF())!=null) {
sb.append(dis+"\\n"); // 여기서 여러 하나 발생
}
// 아마... 여기서 뜨는 어떤 에러를 삭제했음
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
return sb;
}
public void fileEdit(String file, String s) {
// 매개변수로 받은 파일 명에 문자열 저장
try(DataOutputStream dos = new DataOutputStream(new FileOutputStream(file, true))) {
dos.writeUTF(s);
} catch(IOException e) {
e.printStackTrace();
}
}
}
package com.kh.practice.file.controller;
import com.kh.practice.file.model.dao.FileDAO;
public class FileController {
private FileDAO fd = new FileDAO();
public boolean checkName(String file) {
// DAO에 매개변수를 전달하고, DAO로부터 전달받은 값을 다시 반환
boolean result = fd.checkName(file);
return result;
}
public void fileSave(String file, StringBuilder sb) {
// 전달받은 매개변수를 변경하고 DAO에 전달
// 매개변수로 넘어온 sb를 String으로 바꿔 fd의 fileSave()메소드 매개변수로
// file과 String을 넘김
String s = sb.toString();
fd.fileSave(file, s);
}
public StringBuilder fielOpen(String file) {
// DAO에 매개변수를 전달하고, DAO로부터 전달받은 값을 다시 반환
// fd의 fileOpen() 매개변수로 file을 넘겨주고 그 반환 값을 그대로 받아 또 반환
return fd.fileOpen(file);
}
public void fileEdit(String file, StringBuilder sb) {
// 전달받은 매개변수를 변경하고 DAO에 전달
// 매개변수로 넘어온 sb를 String으로 바꿔 fd의 fileEdit()메소드 매개변수로
// file과 String을 넘김
String s = sb.toString();
fd.fileEdit(file, s);
}
}
package com.kh.practice.file.view;
import java.util.Scanner;
import com.kh.practice.file.controller.FileController;
public class FileMenu {
private Scanner sc = new Scanner(System.in);
private FileController fc = new FileController();
public void mainMenu() {
System.out.println("***** My Note *****");
while(true) {
System.out.println("1. 노트 새로 만들기");
System.out.println("2. 노트 열기");
System.out.println("3. 노트 열어서 수정하기");
System.out.println("9. 끝내기");
System.out.print("메뉴 번호 : ");
int num = Integer.parseInt(sc.nextLine());
switch(num) {
case 1: fileSave(); break;
case 2: fileOpen(); break;
case 3: fileEdit(); break;
case 9:
System.out.println("프로그램을 종료합니다.");
return;
default:
System.out.println("잘못 입력하셨습니다. 다시 입력해주세요.");
}
}
}
public void fileSave() {
// 파일명과 저장할 값을 받음
StringBuilder sb = new StringBuilder();
System.out.println("파일에 저장할 내용을 입력하세요.");
System.out.println("ex끝it 이라고 입력하면 종료됩니다.");
while (true) {
System.out.print("내용 :");
String content = sc.nextLine();
if(content.equals("ex끝it")) {
break;
}
sb.append(content+"\\n");
}
while(true) {
System.out.print("저장할 파일 명을 입력해주세요(ex. myFile.txt) : ");
String file = sc.nextLine();
if(fc.checkName(file)==true) {
System.out.print("이미 존재하는 파일입니다. 덮어쓰시겠습니까?(y/n) : ");
char yn = sc.nextLine().charAt(0);
if(yn=='y' || yn=='Y') {
fc.fileSave(file, sb);
return;
} else if(yn=='n' || yn=='N') {
break;
}
} else {
fc.fileSave(file, sb);
break;
}
}
}
public void fileOpen() {
// 파일명을 받아 저장된 데이터 출력
System.out.print("열 파일 명 : ");
String file = sc.nextLine();
boolean isThere = fc.checkName(file);
if(isThere == true) {
System.out.println((fc.fielOpen(file)));
} else {
System.out.println("없는 파일입니다.");
mainMenu();
return;
}
}
public void fileEdit() {
// 파일명과 저장할 값을 받음
StringBuilder sb = new StringBuilder();
System.out.print("수정할 파일 명 : ");
String file = sc.nextLine();
boolean isThere = fc.checkName(file);
if(isThere == false) {
System.out.println("없는 파일입니다.");
mainMenu();
} else {
while (true) {
System.out.println("파일에 저장할 내용을 입력하세요.");
System.out.println("ex끝it 이라고 입력하면 종료됩니다.");
System.out.print("내용 : ");
String content = sc.nextLine();
if(content.equals("ex끝it")) {
break;
}
sb.append(content);
}
}
}
}
package com.kh.practice.file.run;
import com.kh.practice.file.view.FileMenu;
public class Run {
public static void main(String[] args) {
FileMenu fm = new FileMenu();
fm.mainMenu();
}
}