간이 프로젝트
일기장 만들기(파일 입출력을 활용한..)
파일명은 날짜로 작성. 예) 20230425.txt
메뉴>
1. 일기 작성하기
2. 일기 불러오기
3. 일기 수정하기
4. 일기 삭제하기
0. 종료
참고)
수정하기는 같은 날짜에 새로운 내용을 덮어쓰는 형태로 작성할 것.
지난 날짜의 일기는 새로 작성할 수 없음.
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class DiaryMain {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("-------------------------------");
System.out.println("★ 간이프로젝트 - 일기장 만들기 ★");
System.out.println("-------------------------------");
int menu = -1;
while (true) {
System.out.println("메뉴> ");
System.out.println("1. 일기 작성하기");
System.out.println("2. 일기 불러오기");
System.out.println("3. 일기 수정하기");
System.out.println("4. 일기 삭제하기");
System.out.println("0. 종료");
System.out.print("선택> ");
try {
menu = Integer.parseInt(sc.nextLine());
} catch (InputMismatchException e) {
System.out.println("이전 메뉴로 돌아갑니다.");
} catch (NumberFormatException ne) {
}
if (menu == 0) {
System.out.println("종료합니다.");
break;
}
String path = "data";
File folder = new File("data");
if (!folder.isDirectory()) {
boolean b = folder.mkdir();
}
switch (menu) {
case 1:
write();
break;
case 2:
reader();
break;
case 3:
correction();
break;
case 4:
delete();
break;
default:
System.out.println("0~4까지만 입력하세요.");
System.out.println(" ");
}
}
}
private static void delete() {
String path = "M:\\Raspberry-work\\java\\diary main\\data";
File folder = new File(path);
FileReader fr = null;
File list[] = folder.listFiles();
for (File f : list) {
System.out.println(f.getName());
}
System.out.print("삭제할 파일 : ");
String fname = sc.nextLine();
File fd = new File(path + "\\" + fname + ".txt" + "");
if (fd.exists()) {//파일 유무 확인 먼저.
boolean b2 = fd.delete();
if (b2) {//파일 이름 구하기 : getName()
System.out.println(fd.getName() + " 삭제 성공");
} else {
System.out.println("삭제 실패");
}
} else {
System.out.println("파일이 없습니다.");
}
}
private static void correction() {
String path = "M:\\Raspberry-work\\java\\diary main\\data";
File folder = new File(path);
FileWriter fw = null;
File list[] = folder.listFiles();
for (File f : list) {
System.out.println(f.getName());
}
System.out.print("수정할 일기 : ");
String fname = sc.nextLine();
File fc = new File(path + "\\" + fname + ".txt" + "");
try {
fw = new FileWriter(fc);
StringBuffer sb = new StringBuffer();
//file 뒤에 true를 넣으면, append 모드로 동작.
//new FileWriter(file, true);
System.out.println("<수정할 내용>");
while (sc.hasNextLine()) {
String s = sc.nextLine();
if (s.equals(""))
break;
sb.append(s + "\n");
}
fw.write(sb.toString());
System.out.println("수정 완료");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void reader() {
String path = "M:\\Raspberry-work\\java\\diary main\\data";
File folder = new File(path);
FileReader fr = null;
if (folder.exists()) {
File list[] = folder.listFiles();
//폴더 내부의 파일목록 가져오기 : listFiles()
for (File f : list) {
//System.out.println(f.getName());
if (f.isFile()) {
System.out.println("일기 날짜 : " + f.getName());
try {
fr = new FileReader(f);
int i = 0;
System.out.println("내용> ");
while ((i = fr.read()) != -1) {
System.out.print((char) i);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
private static void write() {
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1; // 배열 값이어서 + 1
int date = cal.get(5); //DATE = 5
Date today = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
String fname = sdf1.format(today);
fname += ".txt";
File f = new File("data\\" + fname);
FileWriter fw = null;
BufferedWriter bw = null;
try {
//createNewFile() 파일 생성 성공 시 true.
//같은 이름의 파일 존재 시 false.
boolean b = f.createNewFile();
if (b) {
System.out.println("파일 생성 성공");
try {
fw = new FileWriter(f);
bw = new BufferedWriter(fw);
StringBuffer sb = new StringBuffer();
System.out.println("<저장내용>");
while (sc.hasNextLine()) {
String s = sc.nextLine();
if (s.equals(""))
break;
sb.append(s + "\n");
}
bw.write(String.valueOf(sb));
bw.flush();
System.out.println("저장 완료");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
System.out.println("이미 파일이 존재합니다.");
}
} catch (IOException e) {
e.printStackTrace();//예외사항 출력.
}
}
}
'공부기록 > 실습' 카테고리의 다른 글
5월 1일 과자 제품 관리 프로그램 프로젝트(MVC 패턴 - 출력부분) (0) | 2023.05.02 |
---|---|
4월 28일 Java - 회원 관리 프로그램 (0) | 2023.04.28 |
4월 20일 Java - 사진 이미지 열기 (0) | 2023.04.20 |
4월 19일 Java - 게임 액세사리 정보관리 프로그램 (0) | 2023.04.19 |
연습문제 DB - 마트 운영 SQL 작성해보기 (0) | 2023.04.06 |