본문 바로가기
java&eclipse 코딩 알고리즘/20231214

MemoList

by 몽상크리에이터 2023. 12. 14.

package com.tjoeun.memo;

 

import java.io.File;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.Objects;

import java.util.Scanner;

import java.util.StringTokenizer;

 

public class MemoList {

private ArrayList<MemoVO> memoList = new ArrayList<MemoVO>();

 

public MemoList() {

}

 

public ArrayList<MemoVO> getMemoList() {

return memoList;

}

 

public void setMemoList(ArrayList<MemoVO> memoList) {

this.memoList = memoList;

}

 

@Override

public String toString() {

String str = "";

if (memoList.size() == 0) {

str += "저장된 메모가 없습니다.\n";

} else {

for (int i = memoList.size()-1; i >= 0; i--) {

str += memoList.get(i) + "\n";

}

}

 

return str;

}

 

@Override

public int hashCode() {

return Objects.hash(memoList);

}

 

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

MemoList other = (MemoList) obj;

return Objects.equals(memoList, other.memoList);

}

public void addMemo(MemoVO vo) {

memoList.add(vo);

}

 

public MemoVO selectMemo(int idx) {

try {

return memoList.get(idx - 1);

} catch (IndexOutOfBoundsException e) {

return null;

}

}

public void deleteMemo(int idx) {

memoList.remove(idx - 1);

for (int i = 0; i < memoList.size(); i++) {

memoList.get(i).setIdx(i + 1);

}

MemoVO.count = memoList.size();

}

public void updateMemo(int idx, String memo) {

memoList.get(idx - 1).setMemo(memo);

}

// MemoMain클래스에서 호츌되는 텍스트 파일의 이름을 넘겨받아 ArrayList에 저장된 데이터를

// 텍스트 파일에 저장하는 메소드

public void writeMemo(String filename) {

PrintWriter printWriter = null;

// 텍스트 파일이 저장될 경로와 텍스트 파일의 이름을 연결한다.

// String filepath = "./src/com/tjoeun/memo/" + filename + ".txt";

String filepath = String.format("./src/com/tjoeun/memo/%s.txt", filename);

// System.out.println(filepath); // 테스트용

 

try {

printWriter = new PrintWriter(filepath);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss");

// ArrayList에 저장된 데이터를 공백으로 구분해서 텍스트 파일에 1줄에 연결해서 출력한다

 

// 일반 for

// for (int i = 0; i < memoList.size(); i++) {

// MemoVO vo = memoList.get(i);

//// String str = "";

//// str += vo.getIdx() + " ";

//// str += vo.getName().replace(" ", "`") + " "; // 하나의 데이터(이름)에 공백이 존재하는 경우 희귀문자로 변경해서 공백을 없애준다

//// str += vo.getPassword() + " ";

//// str += vo.getMemo().replace(" ", "`") + " ";

//// str += sdf.format(vo.getWriteDate());

// String str = String.format("%d %s %s %s %s", vo.getIdx(), vo.getName().replace(" ", "`"),

// vo.getPassword(), vo.getMemo().replace(" ", "`"), sdf.format(vo.getWriteDate()));

//

// printWriter.write(str + "\r\n");

// }

 

for (MemoVO vo : memoList) {

String str = String.format("%d %s %s %s %s", vo.getIdx(), vo.getName().replace(" ", "`"),

vo.getPassword(), vo.getMemo().replace(" ", "`"), sdf.format(vo.getWriteDate()));

printWriter.write(str + "\r\n");

}

System.out.println(filename + ".txt 파일에 쓰기 완료!!!");

} catch (Exception e) {

e.printStackTrace();

System.out.println("파일의 경로가 잘못되었거나 파일이 존재하지 않습니다.");

} finally {

if (printWriter != null) {

printWriter.close();

}

}

}

// MemoMain클래스에서 호츌되는 텍스트 파일의 이름을 넘겨받아 텍스트 파일에 저장된 데이터를

// ArrayList로 읽어오는 메소드

public void readMemo(String filename) {

Scanner scanner = null;

// 텍스트 파일이 저장된 경로와 텍스트 파일의 이름을 연결한다.

String filepath = String.format("./src/com/tjoeun/memo/%s.txt", filename);

try {

scanner = new Scanner(new File(filepath));

// 텍스트 파일에 저장된 데이터를 마지막 줄까지 읽어서 ArrayList에 저장한다.

while (scanner.hasNextLine()) {

// 텍스트에서 1줄을 읽어 들인다.

String str = scanner.nextLine().trim();

// System.out.println(str); 확인용

 

// 읽어들인 데이터를 공백을 경계로 읽어 각각의 변수에 저장한다.

Scanner scan = new Scanner(str);

int idx = scan.nextInt();

String name = scan.next().replace("`", " ");

String password = scan.next();

String memo = scan.next().replace("`", " ");

String temp = scan.nextLine().trim();

 

// 텍스트 파일에서 읽어드린 문자열로 변환되서 저장된 날짜 데이터를 Date 클래스 객체를

// 사용해서 날짜 데이터로 변환한다.

 

// 방법1 : substring() 메소드

// System.out.println(temp.substring(0, 4));

// int year = Integer.parseInt(temp.substring(0, 4)) - 1900;

// int month = Integer.parseInt(temp.substring(5, 7)) -1;

// int day = Integer.parseInt(temp.substring(8, 10)) ;

// int hour = Integer.parseInt(temp.substring(11, 13)) ;

// int minute = Integer.parseInt(temp.substring(14, 16)) ;

// int second = Integer.parseInt(temp.substring(17)) ;

 

// 방법2 : split() 메소드

// split() 메소드의 구분자를 "."으로 지정하면 제대로 동작하지 않는다.

// split() 메소드의 구분자를 "."을 꼭 사용해야 한다면 "\\." 또는 "[.]"으로 지정한다.

// String[] date = temp.split("\\.");

// System.out.println(Arrays.toString(date));

 

// int year = Integer.parseInt(date[0]) - 1900;

// int month = Integer.parseInt(date[1]) -1;

// int day = Integer.parseInt(date[2]) ;

// int hour = Integer.parseInt(date[3]) ;

// int minute = Integer.parseInt(date[4]) ;

// int second = Integer.parseInt(date[5]) ;

 

// 방법3 StringTokenizer

StringTokenizer date = new StringTokenizer(temp, ".");

int year = Integer.parseInt(date.nextToken()) - 1900;

int month = Integer.parseInt(date.nextToken()) -1;

int day = Integer.parseInt(date.nextToken()) ;

int hour = Integer.parseInt(date.nextToken()) ;

int minute = Integer.parseInt(date.nextToken()) ;

int second = Integer.parseInt(date.nextToken()) ;

Date writeDate = new Date(year, month, day, hour, minute, second);

// System.out.println(writeDate);

 

 

// 읽어들인 데이터를 ArrayList에 저장하기 위해 memoVO 클래스 객체로 만든다.

// 방법1 : 기본생성자 이용 (가장 많이 이용)

// MemoVO vo = new MemoVO();

// vo.setIdx(idx);

// vo.setName(name);

// vo.setPassword(password);

// vo.setMemo(memo);

// vo.setWriteDate(writeDate);

 

// 방법2 : MemoVO(name, password, memo) 생성자 사용

// MemoVO vo = new MemoVO(name, password, memo);

// vo.setIdx(idx);

// vo.setWriteDate(writeDate);

 

// 모든 데이터를 초기화하는 생성자

MemoVO vo = new MemoVO(idx, name, password, memo, writeDate);

 

 

// System.out.println(vo);

 

// MemoVo 클래스 객체에 저장된 텍스트 파일에서 읽어온 데이터를 ArrayList에 저장한다.

memoList.add(vo);

 

}

System.out.println(filename + ".txt 파일에서 읽기 완료!!!");

} catch (Exception e) {

System.out.println("파일의 경로가 잘못되었거나 파일이 존재하지 않습니다.");

}

 

}

 

 

}

'java&eclipse 코딩 알고리즘 > 20231214' 카테고리의 다른 글

MemoMain  (0) 2023.12.14
MemoVO  (0) 2023.12.14
StringTokenizerTest  (0) 2023.12.14
TextFileReadTest2  (0) 2023.12.14
TextFileReadTest  (0) 2023.12.14