[01] 파일 입출력
- 메모장, 엑셀, 워드등 파일을 가져오고, 쓸수 있다.
1. 파일 가져오기
D:\java1_201501\workspace\basicJava\data.txt 파일 생성
----------------------------- data.txt
Happy Birthday!!
Gone With The Wind~~
환영합니다
----------------------------- InputTest.java
package oop0204;
import java.io.BufferedReader;
import java.io.FileReader;
public class InputTest {
public static void main(String[] args) {
String fileName = "D:/java1117/workspace/basicJava/data.txt";
//String fileName="D:\\java1_201501\\workspace\\basicJava\\data.txt"; //경로 구분 기호는 \\ 2개씩 한다
try {
FileReader fr = new FileReader(fileName); // 파일 읽기 실행
BufferedReader br = new BufferedReader(fr);// 메모리에 파일 내용 저장
String str = "";
String line = "";
while (true) {
line = br.readLine(); // 한 라인씩 읽음
if (line == null){ // 파일을 마지막까지 읽은 경우
break; // while문 종료
}
System.out.println(line); // 문자열 추가, \n: 라인 변경
}
br.close(); // 메모리 해제
fr.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
2. 파일 출력하기
----------------------------- OutputTest.java
package oop0204;
import java.io.FileWriter;
import java.io.PrintWriter;
public class OutputTest {
public static void main(String[] args) {
String fileName = "D:/java1117/workspace/basicJava/sungjuk.txt";
//String fileName="D:\\java1_201501\\workspace\\basicJava\\sungjuk.txt";
try{
// false: 덮어쓰기
// true: 추가(append)
FileWriter fw=new FileWriter(file,false);
// 버퍼 클리어: true
PrintWriter out=new PrintWriter(fw, true);
out.println("무궁화,90,95,60");
out.println("라일락,100,90,65");
out.println("오필승,90,100,80");
out.println("진달래,65,80,85");
out.println("홍길동,90,95,75");
out.close();
fw.close();
System.out.println("데이터 파일을 생성했습니다.");
}catch(Exception e){
System.out.println(e.toString());
}
}
}
3. 파일 입력, 출력 동시에 진행
1) 예제: split() 메소드
----------------------------- data.txt
왕눈이,90,95,60,75
아로미,100,90,65,90
가길동,90,100,80,85
나길동,65,80,85,95
홍길동,90,95,75,100
----------------------------- IOProcessTest.java
package oop1118;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Date;
public class IOProcessTest {
public static void main(String[] args) {
String fileName = "D:/java1117/workspace/data.txt";
String fileNameOutput = "D:/java1117/workspace/result.txt";
try{
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter(fileNameOutput, false);
PrintWriter pw = new PrintWriter(fw, true);
String line = "";
pw.println(" 2014년 신입사원 평가 점수 ");
pw.println("");
pw.println("평가일: " + new Date().toLocaleString());
pw.println("--------------------------------------------");
pw.println("성 명 JAVA JSP SPRING PROJECT TOT AVG");
pw.println("--------------------------------------------");
while(true){
line = br.readLine(); // 한라인씩 읽어옴.
if (line == null){
break;
}
String[] str = line.split(",");
// System.out.println(str[0]);
// System.out.println(str[1]);
// System.out.println(str[2]);
// System.out.println(str[3]);
// System.out.println(str[4]);
String name = str[0]; // 성명
int java = Integer.parseInt(str[1]); // JAVA
int jsp = Integer.parseInt(str[2]); // JSP
int spring = Integer.parseInt(str[3]); // SPRING
int project = Integer.parseInt(str[4]); // PROJECT
int tot = java + jsp + spring + project;
int avg = tot / 4;
pw.println(name + " " + java + " " + jsp + " " + spring + " " + project + " "+ tot + " " + avg);
pw.println("--------------------------------------------");
}
pw.println(" SOLDESK IT Academy 2014 ");
br.close();
fr.close();
pw.close();
fw.close();
}catch(Exception e){
}
System.out.println("신입사원 성적처리가 완료 되었습니다.");
}
}
2) 예제: StringTokenizer 클래스 이용
----------------------------- SungjukTest.java
package oop0204;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.StringTokenizer;
public class SungjukTest {
public static void main(String[] args) {
/*
1)입력파일: sungjuk.txt
----------------
무궁화,90,95,60
라일락,100,90,65
오필승,90,100,80
진달래,65,80,85
홍길동,90,95,75
---------------
2)출력파일: result.txt
----------------------------------------------
무궁화 100 100 100 100 1 합격 ********** 장학생
홍길동 20 50 30 33 5 불합격 ***
개나리 90 95 90 91 2 합격 *********
진달래 70 80 60 70 4 합격 *******
라일락 35 100 100 78 3 재시험 *******
----------------------------------------------
*/
String[] name=new String[5];
int[] kor=new int[5];
int[] eng=new int[5];
int[] mat=new int[5];
int[] aver=new int[5];
int[] rank={1,1,1,1,1};
int size=name.length;
int idx=0;
String fileName="D:\\java1_201501\\workspace\\basicJava\\sungjuk.txt";
try {
FileReader in=new FileReader(fileName); //data.txt가져오기
BufferedReader br=new BufferedReader(in);
String line=null;
while(true){ //각각의 배열에 입력값 대입
line=br.readLine(); //무궁화,90,95,60
if(line==null) break;
StringTokenizer st = new StringTokenizer(line,",");
while (st.hasMoreTokens()) {
name[idx]=st.nextToken(); //name[0]="무궁화"
kor[idx]=Integer.parseInt(st.nextToken()); //kor[0]=90
eng[idx]=Integer.parseInt(st.nextToken()); //eng[0]=95
mat[idx]=Integer.parseInt(st.nextToken()); //mat[0]=60
} //배열의 입력 자료 완료
idx++;
}
//과제) 평균, 등수구하기
//평균구하기
for(idx=0; idx<size; idx++){
aver[idx]=(kor[idx]+eng[idx]+mat[idx])/3;
}
//등수구하기(평균을 기준으로)
for(int a=0; a<size; a++){
for(int b=0; b<size; b++){
if(aver[a]<aver[b]) rank[a]=rank[a]+1; //rank[a]++
}
}
//과제) 출력 result.txt파일 완성하기
// 3) result.txt 파일에 출력하기
FileWriter fw=new FileWriter(ofile,false);
PrintWriter out=new PrintWriter(fw, true);
// %s 문자열
// %d 정수
// %f 실수
for(idx=0; idx<size; idx++){
out.printf("%-6s %5d %5d %5d %5d %3d ",name[idx],kor[idx],eng[idx],mat[idx],aver[idx],rank[idx]);
if(aver[idx]>=70){
if(kor[idx]<40||eng[idx]<40||mat[idx]<40)
out.printf("%-5s","재시험"); // 5칸내에서 왼쪽정렬
else
out.printf("%-5s","합격");
}
else {
out.printf("%-5s","불합격");
}
for(int star=0; star<aver[idx]/10; star++){
out.print("*");
}
if(aver[idx]>=95) out.printf("%-12s","장학생"); // 10칸내에서 오른쪽정렬
out.println(); // 줄바꿈
}
// 자원반납
in.close(); br.close();
fw.close(); out.close();
System.out.println("성적프로그램 완성OK!!");
}catch(Exception e){
System.out.println(e);
}
}
}
[02] Properties 클래스
- 확장명을 .properties로 저장한다
- = 문자 또는 : 문자로 key, value를 구분해서 저장한다.
- =, : 문자를 기준으로 자동으로 문자열을 분리한다.
- 주로 환경 구축 설정 파일 용도로 사용한다.
----------------------------- command.properties
login.do=net.control.Login
hi.do=net.control.Hello
life.do=net.control.LifeCycle
----------------------------- PropertiesTest.java
package oop0227;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
public class PropertiesTest {
public static void main(String[] args) {
try {
//파일가져오기
String fileName="D:\\java0210\\workspace\\basicJava\\src\\oop0227\\command.properties";
FileInputStream fis=new FileInputStream(fileName);
Properties pr=new Properties();
pr.load(fis);
Iterator iter=pr.keySet().iterator(); //= 앞의 문자열
Map map=new HashMap();
while(iter.hasNext()) {
String key=(String)iter.next(); //list.do
String value=pr.getProperty(key); //=뒤의 문자열
map.put(key, value);
}
System.out.println(map.get("list.do"));
System.out.println(map.get("write.do"));
System.out.println(map.get("read.do"));
fis.close();
}catch(Exception e) {
System.out.println(e);
}
}
}
댓글 ( 4)
댓글 남기기