Java 11일차 : 파일입출력

File 클래스

  • API

  • 주요 메서드

delete 디렉토리에서 파일 삭제
exists 파일이 존재하면true
getAbsolutePath 절대경로
getName 파일이름반환
getPath 경로 반환
isDirectory 디렉토리면true
isFile 파일이면true
length 파일크기(단위는byte)
list 그 디렉토리의 목록을String[]타입으로 반환
listFiles 그 디렉토리 파일들을 파일객체로 반환
package test.day0417;

import java.io.File;
public class FileEx1 {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    File file1 = new File("/Users/jenny/Desktop/Acorn/work/score.txt");
    File file2 = new File("/Users/jenny/Desktop/Acorn/work/score2.txt");

    File dir1 = new File("/Users/jenny/Desktop/Acorn/work");
    System.out.println(file1.isDirectory());
    System.out.println(dir1.isDirectory());
    System.out.println(file1.canRead());
    System.out.println(file1.canWrite());
    System.out.println(file1.exists());
    System.out.println(file2.exists());
    System.out.println(file1.getAbsolutePath());
    System.out.println(file1.getPath());
    System.out.println(file1.getName());
    System.out.println(file1.length());
    System.out.println("=================");
    String list[] = dir1.list();
    for(String s:list)
      System.out.println(s);
    System.out.println("=================");

    File files[] = dir1.listFiles();
    for(File f:files)
      System.out.println(f.getName());
    System.out.println("=================");

    if(file1.exists()) {
      file1.delete();
      System.out.println("파일이 삭제되었습니다.");
    }
    else
      System.out.println("파일이 없습니다!");
  }
}

FileWriter 클래스

package test.day0417;

import java.io.FileWriter;
import java.io.IOException;

public class FileEx2 {
  public static void main(String arg[]) {
    FileWriter fw = null;
    try {
      //파일이 없으면 새로 생성하고 있으면 덮어씀.
      fw = new FileWriter("/Users/jenny/Desktop/Acorn/work/memo.txt");
      fw.write("apple");
      fw.write("orange\n");
      fw.write("hello\n");
      System.out.println("파일저장완료. 탐색기에서 확인바람.");
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally {
      if(fw!=null)
        try {
          fw.close();
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
    }
  }
}
package test.day0417;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileWriterEx3 {

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    FileWriter fw = null;
    BufferedReader br = null;

    br = new BufferedReader(new InputStreamReader(System.in));
    try {
      fw = new FileWriter("/Users/jenny/Desktop/Acorn/work/memo3.txt",true);//append 모드 
      while(true) {
        System.out.println("저장할 문장 입력하기!");
        String line = br.readLine();
        if(line.equals("exit"))
          break;
        else {
          System.out.println(line + "이 저장되었습니다.");
          fw.write(line + "\r\n");
        }
      }
      System.out.println("저장완료! 파일 확인 바람 ");
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } finally {
      try {
        if(br != null) br.close();
        if(fw != null) fw.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
}

실습문제

Shop 클래스

  • 상품, 가격, 색상
    1. shop 제품을 입력하면 리스트에 저장
    2. 파일저장 메뉴를 누르면 리스트의 내용을 파일에 저장
    3. 다시 실행하면 자동으로 파일의 내용을 읽어서 리스트에 저장
package test.day0417;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.util.Vector;

public class ShopFileEx4 {

  Scanner sc;
  FileReader fr;
  FileWriter fw;
  BufferedReader br;

  List<Shop> listFromFile;
  List<Shop> newList;

  static final String FILENAME = "/Users/jenny/Desktop/Acorn/work/shop.txt";

  public ShopFileEx4() {
    sc = new Scanner(System.in);
    listFromFile = new Vector<Shop>();
    newList = new Vector<Shop>();

    File f = new File(FILENAME);
    if(f.exists())
      fileRead();

  }

  //파일에서 읽어서 벡터에 저장하는 메서드
  public void fileRead() {
    try {
      fr = new FileReader(FILENAME);
      br = new BufferedReader(fr);

      while(true) {
        //파일에서 한줄씩 읽는다.
        String line = br.readLine();
        //문서의 끝으로 가면 null값을 반환한다.
        if(line == null)
          break;
        //파일에서 읽은 한줄을 분리한다.
        StringTokenizer st = new StringTokenizer(line, ",");
        while(st.hasMoreTokens()) {
          listFromFile.add(new Shop(st.nextToken(),Integer.parseInt(st.nextToken()),st.nextToken()));		
        }

      }			
    } catch (FileNotFoundException e) {
      System.out.println("파일이 없습니다.");
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally {
      try {
        if(br!= null) br.close();
        if(fr!= null) fr.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }


  }

  //키보드로 샵 정보를 입력해서 벡터에 추가하는 메서드
  public void dataAdd() {
    String sangpum;
    int price;
    String color;

    System.out.println("상품 이름을 입력하세요.");
    sangpum = sc.nextLine();
    System.out.println("가격을 입력하세요.");
    price = sc.nextInt();
    sc.nextLine();
    System.out.println("색상을 입력하세요.");
    color = sc.nextLine();

    newList.add(new Shop(sangpum, price, color));

  }

  //벡터의 정보를 파일에 저장하는 메서드
  public void fileWrite() {
    try {
      fw = new FileWriter(FILENAME, true);

      for(Shop s:newList) {
        String line = s.getSangpum() + "," + s.getPrice() + "," + s.getColor() +"\n";
        fw.write(line);
      }

    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }finally {
      try {
        if(fw!=null) fw.close();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }

  //메뉴 선택시 번호 반환하는 메서드
  public int getMenu() {
    System.out.println("1.데이타 추가 \t 2.전체 출력 \t 3.파일 저장 \t 4. 종료 ");
    int n = sc.nextInt();
    sc.nextLine();
    return n;
  }

  //전체 출력하는 메서드
  public void writeAll() {

    int i = 1;
    System.out.println("------------------------------");
    System.out.println("번호  상품명        가격      색상 ");
    System.out.println("------------------------------");

    for(Shop s:listFromFile) {
      System.out.printf("%3d %-10s %7d %7s",i,s.getSangpum(),s.getPrice(),s.getColor());
      System.out.println();
      i++;
    }
    for(Shop s:newList) {
      System.out.printf("%3d %-10s %7d %7s",i,s.getSangpum(),s.getPrice(),s.getColor());
      System.out.println();
      i++;
    }
    System.out.println("------------------------------");

  }


  //이 모든 로직을 처리할 시작 메서드
  public void process() {

    while(true) {

      switch(this.getMenu()) {
        case 1: //데이타 추가 
          dataAdd();
          break;
        case 2: //전체 출력 
          writeAll();
          break;
        case 3://파일 저장
          fileWrite();
          System.out.println("저장 후 종료합니다.");
          System.exit(0);
        case 4:
          System.out.println("종료합니다.");
          System.exit(0);
      }
    }
  }

  public static void main(String[] args) {
    // TODO Auto-generated method stub
    //인스턴스 생성 후 process 호출
    ShopFileEx4 sh = new ShopFileEx4();
    sh.process();

  }
}

Categories:

Updated:

Comments