Java -FileWriter -1
FileWriter 스트림을 이용해서 파일을 저장해서 주소를 입력받고 출력받는 프로그램을 만들것이다.
메인화면은
1~7번까지 위와같이 구성되어있고,
세부내용은 밑사진과같이 출력하고자한다.
class Address
public class Address {
//필드
private String num;
private String name;
private String tel;
private String address;
//메소드
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return num + "," + name + "," + tel + "," + address + "\n";
}
}
class AddressDAO
import java.io.*;
import java.util.*;
public class AddressDAO { // Database Access Object (데이타 접근 객체)
File file = new File("C:/java/Project/java gukbi/java2/address.txt");
//파일초기화
public void clear() {
Scanner s = new Scanner(System.in);
try {
FileWriter writer = new FileWriter(file, false);
writer.flush();
writer.close();
System.out.println("파일 초기화 완료!");
}catch(Exception e) {
System.out.println("오류:" + e.toString());
}
}
//데이터입력
public void insert(Address vo) {
try {
FileWriter writer = new FileWriter(file, true);
writer.write(vo.toString());
writer.flush();
writer.close();
System.out.println("학생등록완료!");
}catch(Exception e) {
System.out.println("오류:" + e.toString());
}
}
//데이터수정
public void update(Address vo) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
String strFile ="";
while((line=reader.readLine()) != null) { //라인단위로 읽어온 데이터가 null 이 아닌동안에
String[] item = line.split(",");
if(!vo.getNum().equals(item[0])) { //수정할 데이터가 아닌경우
Address v = new Address();
v.setNum(item[0]);
v.setName(item[1]);
v.setTel(item[2]);
v.setAddress(item[3]);
strFile=strFile + v.toString();
} else { //수정할 데이터인경우
strFile=strFile+ vo.toString();
}
}
//삭제할 데이터를 제외하고 저장
FileWriter writer = new FileWriter(file, false);
writer.write(strFile);
writer.flush();
writer.close();
System.out.println("데이터삭제완료!");
}catch(Exception e) {
System.out.println("오류:" + e.toString());
}
}
//데이터검색
public Address read(String num) {
Address vo = new Address();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while((line=reader.readLine()) != null) { //라인단위로 읽어온 데이터가 null 이 아닌동안에
String[] item = line.split(",");
if(num.equals(item[0])) {
vo.setNum(item[0]);
vo.setName(item[1]);
vo.setTel(item[2]);
vo.setAddress(item[3]);
}
}
}catch(Exception e) {
System.out.println("오류:" + e.toString());
}
return vo;
}
//데이터목록출력
public ArrayList<Address> list() {
ArrayList<Address> array = new ArrayList<>();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
while((line=reader.readLine()) != null) { //라인단위로 읽어온 데이터가 null 이 아닌동안에
String[] item = line.split(",");
Address vo= new Address();
vo.setNum(item[0]);
vo.setName(item[1]);
vo.setTel(item[2]);
vo.setAddress(item[3]);
array.add(vo);
}
}catch(Exception e) {
System.out.println("오류:" + e.toString());
}
return array;
}
//데이터삭제
public void delete(String no) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "";
String strFile ="";
while((line=reader.readLine()) != null) { //라인단위로 읽어온 데이터가 null 이 아닌동안에
String[] item = line.split(",");
if(!no.equals(item[0])) {
Address vo = new Address();
vo.setNum(item[0]);
vo.setName(item[1]);
vo.setTel(item[2]);
vo.setAddress(item[3]);
strFile=strFile + vo.toString();
}
}
//삭제할 데이터를 제외하고 저장
FileWriter writer = new FileWriter(file, false);
writer.write(strFile);
writer.flush();
writer.close();
System.out.println("데이터삭제완료!");
}catch(Exception e) {
System.out.println("오류:" + e.toString());
}
}
}
Main
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
AddressDAO dao = new AddressDAO();
boolean run = true;
int count =0;
Address vo = new Address();
while(run) {
System.out.println("┌───────────────────────────────────────────────────────────────────────────────┐");
System.out.println("│ 1.주소 등록 2.주소목록 3.주소검색 4.주소수정 5.주소삭제 6.파일초기화 7. 프로그램종료 │");
System.out.println("└───────────────────────────────────────────────────────────────────────────────┘");
System.out.println("");
System.out.print("선택하세요>");
String menu = s.nextLine();
switch(menu) {
case "1":
System.out.print("번호 :");
vo.setNum(s.nextLine());
System.out.print("이름 >");
vo.setName(s.nextLine());
System.out.print("전화번호>");
vo.setTel(s.nextLine());
System.out.print("주소>");
vo.setAddress(s.nextLine());
dao.insert(vo);
break;
case "2":
ArrayList<Address> array=dao.list();
for(Address v:array) {
// System.out.println(v.toString());
System.out.printf("%-3s\t%s\t%s\t%s\n", v.getNum(),v.getName(),v.getTel(),v.getAddress() );
}
break;
case "3":
System.out.print("검색할번호>");
String no = s.nextLine();
vo=dao.read(no);
if(vo.getName()==null) { //아무것도없으면
System.out.println("등록된 학생이 없습니다.");
}else {
System.out.println("이름 : " +vo.getName());
System.out.println("전화번호: "+ vo.getTel());
System.out.println("주소 : "+ vo.getAddress());
}
break;
case "4":
System.out.print("수정할번호>");
no = s.nextLine();
vo=dao.read(no);
if(vo.getName()==null) {
System.out.println("등록된학생이없습니다.");
}else {
System.out.print("이름: " +vo.getName() + ">");
String name = s.nextLine();
if(!name.equals("")) vo.setName(name);
System.out.print("전화번호: " +vo.getTel() + ">");
String tel = s.nextLine();
if(!tel.equals("")) vo.setTel(tel);
System.out.print("주소: " +vo.getAddress() + ">");
String address = s.nextLine();
if(!address.equals("")) vo.setAddress(address);
System.out.print(vo.toString()+"으로 수정하실래요?(y/n)");
String sel=s.nextLine();
if (sel.equals("Y")||sel.equals("y") ) {
}
dao.update(vo);
}
break;
case "5":
System.out.print("삭제 할 번호>");
no = s.nextLine();
vo=dao.read(no);
if(vo.getName()==null) {
System.out.println("등록된 학생이 없습니다.");
}else {
System.out.println("이름 : " +vo.getName());
System.out.println("전화번호: "+ vo.getTel());
System.out.println("주소 : "+ vo.getAddress());
System.out.print("삭제하실래요(Y/N)?>");
String sel=s.nextLine();
if (sel.equals("Y")||sel.equals("y") ) {
dao.delete(no);
}
}
break;
case "6":
dao.clear();
break;
case "7":
run = false;
break;
default:
System.out.println("1~6번 메뉴를 선택하세요!");
}
}
System.out.println("프로그램을 종료합니다.");
}
}
**case 1: 주소 등록 **
Address 에서 번호,이름,전화번호,주소를 입력(insert)받아서 txt 파일에 입력한다.
case 2: 주소 목록
arraylist 함수를 쓴다. 라인단위로 읽어온 데이터가 null이 아닌동안에 “,”로 나눠진 인덱스 item 로 array 에 담는다 그리고 메인에서 for array로 불러온다.
case 3: 주소 검색
검색할 번호를 입력받아서 read 로 읽어온다. 이때 read는 list와 똑같이 읽어오지만 마지막에 return 같으로 vo를 출력해준다. 그리고 검색번호가 없으면 “등록된 학생이 없습니다” 가 출력. 있다면 정보출력
case 4: 주소 수정
수정할 번호를 입력으로 받아서 read로 읽어온다. 만약에 입력한 값이 있으면 입력한 값을 넣어준다. (이름,전화번호,주소) 그리고 수정을 선택할수있는데 여기는 if 문을 써서 “y” 나 “Y”이면 dao.update 를 통해 값을 가져온다. ProductDAO 클래스의 update , 수정할 값은 vo에 들어가있는상태이다. 리드할 버퍼를 만들어주고 String line 으로 한줄한줄 읽는다.strFile 은 한줄한줄 읽어온걸 누적시킨다. if문에서 수정할 상품을 찾은경우에는 strfile 에서 수정하고자하는 vo에 대한 정보(내가수정으로입력한)를 누적 시키는 것이고, 수정할 상품이 아니면 원래 tostring에 있는 값을 누적을 시켜준다. while 문으로 계속 돌려서 값을 확인한다.
case 5: 주소 삭제
삭제한 번호를 scan으로 입력받는다. 값을 read로 읽어온다. 만약에 입력한 값이 없으면 없다고 출력해주고 아니면 이름,전화번호,주소를 보여주고 삭제할지 물어본다. 여기서 delete메소드를 사용한다. 라인단위로 읽어온 데이터가 null이 아닌동안에 수정할 데이터가 아닌경우에는 원래의 값을 넣어주고 수정할 데이터인경우 vo에 내가 입력한 값을 출력해준다. 그리고 삭제할 데이터를 제외하고 저장한다.
case 6: 파일 초기화
FileWirter에 false 값을 넣어줘서 파일을 초기화해준다.
나름대로 해석을 해봤는데 틀린부분이 있을거다. 계속 수정보완하면서 고쳐나갈것이고 머리는 이해하는데 손으로 치라고하면 힘들다 ㅠㅠ 새로운 개념도 너무많고 머리가 복잡하다. 첨엔 엄청 무지한 상태였는데 여러번 하다보니까 어느정도 이해는되서 기분이좋다. 계속 반복해서 학습해보자!
댓글남기기