Java 11일차 : 파일입출력
File 클래스
-
주요 메서드
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 클래스
- 상품, 가격, 색상
- shop 제품을 입력하면 리스트에 저장
- 파일저장 메뉴를 누르면 리스트의 내용을 파일에 저장
- 다시 실행하면 자동으로 파일의 내용을 읽어서 리스트에 저장
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();
}
}
Comments