자바

[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);
    }

  }

}

 

about author

PHRASE

Level 60  머나먼나라

우물에 침을 뱉는 자는 언젠가 반드시 그 물을 마시게 된다. -탈무드-

댓글 ( 4)

댓글 남기기

작성

자바 목록    more