2016년 6월 17일 금요일

09day java

문법

  • API 토큐먼트 문서를 모르면 프로그램 작성이 어려움
문제 해결을 위해서
  1. 검색
    • 라이브러리 검색
  2. 문법적 지식
    • 시스템 상황
    • 현재 환경 설정
  3. 직접 적용 후 수정코딩 x
    • 간단한 테스트 프로그램 실시 후 라이브러리 적용
    • 재사용을 위해 정리를 해둠
  4. 프로그램 적용
2차원 배열 형식의 데이터 처리
  • Data
    홍길동 010-111-1111 20 서울시
    박문수 010-222-2222 21 경기도
    성춘향 010-333-3333 22 강원도
  • 프로그램에 저장
    • 2차원 배열
API

  • java.io
    • 프로그램 내부로 데이터를 입력 / 출력
      • input
      • output
    • 스트림
      • 1byte
        • 바이너리 / 영문자 / 숫자
        • inputStream
        • OutputStream
      • 2byte
        • 텍스트 (기타 국가 언어)
        • Reader
        • Writer
데이터
  • 임시(휘발) 데이터
    • 변수 / 상수
    • 배열 / 컬렉션
  • 영구 데이터
    : 외부 저장장치에 담긴 데이터
    • 로컬
      • 파일
        • 텍스트파일 : 메모장에서 열 수 있는 파일
        • 바이너리파일 : 메모장에서 열 수 없음
          • ex) jpg, mp3, mp4, ...
      • 시스템
        • 드라이브
        • 디렉토리
        • 파일속성
    • 원격
      • 데이터베이스

1
import java.util.ArrayList;

public class DateEx01 {
    public static void main(String[] args) {
        //2차원 배열
        String[] data1 = {"홍길동", "010-111-1111", "20", "서울시"};
        String[] data2 = {"박문수", "010-222-2221", "21", "경기도"};
        String[] data3 = {"성춘향", "010-222-2222", "22", "강원도"};
        
        String[][] datas = new String[3][]; 
        datas[0] = data1;
        datas[1] = data2;
        datas[2] = data3;
        
        //향상된 for 출력
        for(String[] data : datas){
            System.out.printf("%s \t %s \t %s \t %s \n", data[0], data[1], data[2], data[3]);
        }
        
        //arraylist로 처리
        ArrayList<String> data11 =new ArrayList<>();
        ArrayList<String> data22 =new ArrayList<>();
        ArrayList<String> data33 =new ArrayList<>();
        data11.add("홍길동");
        data11.add("010-111-1111");
        data11.add("20");
        data11.add("서울시");
        data22.add("박문수");
        data22.add("010-222-2222");
        data22.add("21");
        data22.add("경기도");
        data33.add("성춘향");
        data33.add("010-333-3333");
        data33.add("22");
        data33.add("강원도");
        
        ArrayList<ArrayList> al = new ArrayList<>();
        al.add(data11);
        al.add(data22);
        al.add(data33);
        
        for(ArrayList info : al){
            System.out.println(info);
        }
    }
}


2
public class Person {
 private String name;
 private String phone;
 private String age;
 private String region;
 //constructor
 public Person(String name, String phone, String age, String region) {
  this.name = name;
  this.phone = phone;
  this.age = age;
  this.region = region;
 }
 //getter
 public String getName() {
  return name;
 }
 public String getPhone() {
  return phone;
 }
 public String getAge() {
  return age;
 }
 public String getRegion() {
  return region;
 }
 
}

import java.util.ArrayList;

public class DataEx03 {
    public static void main(String[] args) {
        //2차원 arraylist는 배열에 클래스를 넣는 것과 비슷한 개념
        //1차원(열구분) 데이터
        Person p1 = new Person("홍길동", "010-111-1111", "20", "서울시");
        Person p2 = new Person("박문수", "010-222-2222", "21", "경기도");
        Person p3 = new Person("성춘향", "010-333-3333", "22", "강원도");
        // 2차원(행구분) 데이터
        ArrayList<Person> a = new ArrayList<>();
        a.add(p1);
        a.add(p2);
        a.add(p3);
        // 향상된 for 출력
        for(Person p : a){
            System.out.printf("%s \t %s \t %s \t %s \n", p.getName(), p.getPhone(), p.getAge(), p.getRegion());
        }
    }
}


3
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

public class FileEx01 {

    public static void main(String[] args) {
        // File
        File d1 = new File("c:\\java");
        File f1 = new File("c:\\java\\test1.txt"); // 윈도우에서의 디렉토리 표현
        File f2 = new File("c:/java/test.txt"); //리눅스 방식 디렉토리 표현
        File f3 = new File("c:/java", "test.txt");
        
        //존재 유무 탐색
        if(f1.exists()){  //디렉토리도 특수목적 파일임으로 d1.exists() 존재유무를 검사 가능함
            System.out.println("있음");
        }else{
            try {
                f1.createNewFile();  //파일이 존재하지 않을 경우 test1.txt 파일을 생성
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("없음");
        }
        
        //파일 인지를 탐색
        if(f1.isFile()){
            System.out.println("파일");
        }else{
            System.out.println("디렉토리");
        }
        
        //isHidden() 숨김인지, canWrite() 쓰기가능한지, canRead() 읽을 수 있는지
        if(f1.isHidden()){
            System.out.println("숨김파일");
        }else{
            System.out.println("일반파일");
        }
        
        //경로
        try {
            System.out.println(f1.getName());
            System.out.println(f1.getPath()); //현재파일 경로
            System.out.println(f1.getCanonicalPath()); //상대경로
            System.out.println(f1.getParent()); //상위폴더 경로
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        //파일의 크기
        System.out.println(f1.length()+ "Byte"); //숨김파일이라서 0Byte 나옴
        System.out.println(f2.length()+ "Byte");
        
        //생성시간
        System.out.println(f1.lastModified()); //1970년 1월 1일 부터 현재까지 밀리세컨드 단위로 환산시간 Unixdate
        System.out.println(new Date(f1.lastModified()).toLocaleString()); //Date API통해서 현재 시간으로 바꿈
        Calendar c = Calendar.getInstance(); //Calendar API통해서 만듦
        c.setTimeInMillis(f1.lastModified());
        System.out.println(c.get(Calendar.YEAR)+"년 " +c.get(Calendar.MONTH)+"월 "+ c.get(Calendar.DATE)+"일");
    }

}



4
import java.io.File;

public class FileEx02 {

    public static void main(String[] args) {
        //디렉토리 내부의 목록접근 
        File f1 = new File("c:/");
        //배열로 받음
        /*    String[] lists = f1.list();
            for(String list : lists){
                System.out.println(list);
            }*/
        
        //File클래스로 받음 //File 메소드로 파일타입 검사후 디렉토리 경우 괄호
        File[] listFiles = f1.listFiles();
        for(File listFile : listFiles){
            if(listFile.isFile()){
                System.out.println(listFile.getName());
            }else{
                System.out.printf("[%s] \n", listFile.getName());
            }
            
        }
    }

}


5
import java.io.File;

public class FileEx03 {

 public static void main(String[] args) {
  // 디렉토리 생성
  File f = new File("c:/java/dire");
  if(f.mkdir()){      //make directory
   System.out.println("성공");
  }else{
   System.out.println("실패");
  }
  //디렉토리 삭제
  if(f.delete()){  //delete 디렉토리와 파일의 삭제를 다 함
   System.out.println("성공");
  }else{
   System.out.println("실패");
  }
  //이름 변경 renameTo
  

 }

}


6
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileEx04 {

    public static void main(String[] args) {
        // 파일읽기
        FileInputStream fis = null;
        
        try {
            fis = new FileInputStream("c:/java/test.txt"); //new를 쓰면 파일이 열린체로 있음, 에러가 나면 파일이 깨짐
//            int data = fis.read(); //read는 한글짜씩 읽음 ASCII코드로 읽음
//            System.out.println("데이터 : "+ (char)data);
//            data = fis.read();
//            System.out.println("데이터 : "+ (char)data);
            int data = 0;
            while((data = fis.read()) != -1){ //fit.read()는 마지막까지 읽으면 -1을 리턴함
                if(data == '\r'){ //엔터키의 ASCII code도 읽어드림  (window \r \n) (linux \n)
                    System.out.print("(r)");
                }else if(data == '\n'){ 
                    System.out.print("(n)");
                }else{
                System.out.print((char)data);   //1byte 방식으로 읽어서 한글깨짐
                }
            }
            
        } catch (FileNotFoundException e) { //파일을 찾지 못했을 경우 exception
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close(); //에러유무와 관계없이 프로르램 끝에 파일을 닫아줌
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}


7
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileEx05 {

 public static void main(String[] args) {
  // 파일 쓰기
  FileOutputStream fos = null;
  try {
   fos = new FileOutputStream("c:/java/newtest.txt");
   fos.write('a'); //파일글쓰기
   fos.write('b');
   fos.write('c');
   System.out.println("출력 완료");
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally{
   try {
    fos.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  
 }

}


8
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileEx06 {

 public static void main(String[] args) {
  // 이미지 복사
  FileInputStream fis = null;
  FileOutputStream fos = null;
  try {
   fis = new FileInputStream("c:/java/Koala.jpg"); //읽을 파일
   fos = new FileOutputStream("c:/java/newKoala.jpg"); //쓸 파일
   
   int data= 0;
   while((data =fis.read()) != -1){ //읽는 것과 동시에 쓰기
    fos.write(data);
   }
   
   System.out.println("복사 완료");
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try { fos.close(); } catch (IOException e) {}
   try { fis.close(); } catch (IOException e) {}
  }
 }

}


9
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileEx07 {

 public static void main(String[] args) {
  //Buffered // 2차 스트림 // 처리속도가 더 빠름
  BufferedInputStream bis = null;
  FileInputStream fis = null;
  
  try {
   //fis = new FileInputStream("c:/java/test.txt");
   //bis = new BufferedInputStream(fis); //1차 스트림을 통해서 만들수 있음
   bis = new BufferedInputStream(new FileInputStream("c:/java/test.txt")); //fis 객체를 열지 않아도 됨
   
   int data = 0;
   while((data = bis.read()) != -1){
    System.out.print((char)data);
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if(bis != null) try{ bis.close(); } catch(IOException e){}
   //if(fis != null) try{ fis.close(); } catch(IOException e){}
  }

 }

}


10
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileEx08 {
 //Buffered 2차 스트림 쓰기
 public static void main(String[] args) {
  BufferedOutputStream bos = null;
  try {
   bos = new BufferedOutputStream(new FileOutputStream("c:/java/test123.txt"));
   bos.write('a'); bos.write('b'); bos.write('c');
   bos.write('\r'); bos.write('\n');
   
   bos.write('a'); bos.write('b');
   bos.write('\n');
   bos.write('c');
   
   System.out.println("출력 완료");
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if(bos != null) try{ bos.close();} catch(IOException e){}
  }
 }

}


11
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class BufferedEx {

 public static void main(String[] args) {
  // 2차 스트림 이미지 복사 //빠른 속도로 복사됨
  BufferedInputStream bis = null;
  BufferedOutputStream bos = null;
  
  try {
   bis = new BufferedInputStream(new FileInputStream("c:/java/Koala.jpg"));
   bos = new BufferedOutputStream(new FileOutputStream("c:/java/buffered_Koala.jpg"));
   
   int data =0;
   while((data = bis.read()) != -1){
    bos.write(data);
   }
   System.out.println("복사완료");
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if(bis != null) try{ bis.close(); } catch(IOException e){}
   if(bos != null) try{ bos.close(); } catch(IOException e){}
  }
 }

}


12
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileEx10 {
 //FileReader //2byte 파일 읽기
 public static void main(String[] args) {
  FileReader fr = null;
  try {
   fr = new FileReader("c:/java/test.txt");
   
   int data= 0;
   while((data = fr.read()) != -1){
    System.out.print((char)data);
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if(fr != null) try{ fr.close();} catch(IOException e){}
  }
 }

}


13
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileEx11 {

 public static void main(String[] args) {
  // buffered 2byte 읽기
  BufferedReader br = null;
  try {
   br = new BufferedReader(new FileReader("c:/java/test.txt"));
   /* int data= 0;
    while((data = br.read()) != -1){
    System.out.print((char)data);
    */
   String data = null; 
   while((data = br.readLine()) != null){  //readLine은 한줄씩 읽어올 수 있음 //다 읽으면 null값 반환
             //엔터까지 읽고나서 엔터는 출력하지 않음
    System.out.println(data); //println통해서 엔터 추가해줘야함
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if(br != null) try{ br.close();} catch(IOException e){}
  }
 }

}


14
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class FileEx12 {

 public static void main(String[] args) {
  //bufferedWriter 2차 스트림 쓰기
  BufferedWriter bw = null;
  try {
   bw = new BufferedWriter(new FileWriter("c:/java/test_BufferedWrite.txt"));
   
   bw.write("Hello World\r\n");
   bw.write("Hello World\r\n");
   bw.write("Hello World\r\n");
   
   System.out.println("출력완료");
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if(bw != null) try{ bw.close();} catch(IOException e){}
  }
 }

}


15
import java.io.*;

class FileEx13_sub implements Serializable{
 int x;
 int y;
}

public class FileEx13 {

 public static void main(String[] args) throws IOException {
  // 글자가 아니라 object 전체를 쓰기
  FileEx13_sub ap = new FileEx13_sub();
  ap.x = 100;
  ap.y  =200;
  
  File dir = new File("c:/java");
  File file = new File(dir, "object.txt"); //디렉토리와 파일을 분리해서 경로를 작성하는 방법
  FileOutputStream fos = new FileOutputStream(file);
  BufferedOutputStream bos = new BufferedOutputStream(fos);
  ObjectOutputStream oos = new ObjectOutputStream(bos);
  oos.writeObject(ap);
  oos.close();
  
  //만약 객체단위의 출력을 하지 못한다면 다음과 같이 출력해야함
  /*
   File f = new File("aaa.txt");
   FileOutputStream fos = new FileOutputStream(f);
   BufferedOutputStream bos = new BufferedOutputStream(fos);
   ObjectOutputStream oos = new ObjectOutputStream(bos);
   oos.writeInt(ap.x);
   oos.writeInt(ap.y);
   oos.close();
   */
 }

}


16
import java.io.*;

public class FileEx14 {

 public static void main(String[] args) throws IOException {
  // object전체를 읽기
  File file = new File("c:/java/object.txt");
  ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file)));
  Object obj = null;
  
  try {
   obj = ois.readObject();
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } finally {
   ois.close();
  }
  
  FileEx13_sub ap = (FileEx13_sub)obj;
  System.out.println("x = " + ap.x);
  System.out.println("y = " + ap.y);
  
  
 }

}


17
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class FileEx15 {

 public static void main(String[] args) {
  // System.in 통해서 keyboard입력
  //InputStreamReader isr = null; //2byte 한글 읽음
  //InputStream is = null; //1byte 읽음
  BufferedReader br = null; //여러줄 읽음
  
  try {
   //is = System.in;
   //isr = new InputStreamReader(is);
   //br = new BufferedReader(isr);
   br = new BufferedReader(new InputStreamReader(System.in)); //한줄로 초기화
   
   System.out.println("데이터 입력 : ");
   /*System.out.println("입력값 : " + (char)isr.read()); //한글자씩 읽음
   System.out.println("입력값 : " + (char)isr.read());
   System.out.println("입력값 : " + (char)isr.read());*/
   System.out.println("입력값 : " + br.readLine());
   
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if(br != null) try{ br.close(); } catch(IOException e){ }
  }
 }

}


18
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Read {

    public static void main(String[] args) {
        //읽어서 쪼갠뒤에 리스트에 저장
        BufferedReader datas = null;
        ArrayList<ArrayList> all = new ArrayList<>(); //주소행처리 all 리스트 만듬
        try {
            datas = new BufferedReader(new FileReader("c:/java/zipcode_seoul_utf8.csv")); //파일읽음
            String data = null; //한줄읽을 변수 만듦
            while((data = datas.readLine()) != null){ 
                ArrayList<String> al = new ArrayList<>(); //주소열처리 al리스트 만듦
                String[] arr = data.split(","); //주소열 처리 al 어래이 만듦
                //데이터를 집어넣음 값이 없으면 스패이스바를 넣음
                for(int i=0;i<7;i++){
                    if(arr[i].equals("")){
                        al.add(" ");
                    }else{
                        al.add(arr[i]);
                    }
                }
                all.add(al);
                
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(datas != null) try{ datas.close();} catch(IOException e){}
        }

        // 동이름 입력
        BufferedReader br = null;
        String dong = null;
        try {
            while(true){
                br = new BufferedReader(new InputStreamReader(System.in));
                System.out.println("동이름 입력 : ");
                
                dong = br.readLine();
                //입력값이 exit이면 반복문 나오기
                if(dong.equals("exit")){
                    break;
                }else{
                    //리스트에 것을 검색 하고 출력
                    for(ArrayList al : all){
                        if(((String)al.get(3)).indexOf(dong) != -1){
                            System.out.printf("[%s] \t %s \t %s \t %s \t %s \t %s \n",al.get(0),al.get(1),al.get(2),al.get(3),al.get(4),al.get(5));
                        }
                    }    
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(br != null) try{ br.close(); } catch(IOException e){ }
        }
    
    }

}


19
주소검색 코드만들기2 (객체지향적으로)
import java.io.*;
import java.util.ArrayList;

//데이터만 처리하는 bean클래스 만들기
public class DataSet {
    //읽어서 쪼갠뒤에 리스트에 저장
    ArrayList<ArrayList<String>> all = new ArrayList<>();
    
    //생성자에서 매소드를 실행시켜 멤버변수를 채움
    public DataSet(){
        this.DataRead();
    }
    
    public void DataRead() {
        BufferedReader datas = null;
        try {
            datas = new BufferedReader(new FileReader("c:/java/zipcode_seoul_utf8.csv")); //파일읽음
            String data = null; //한줄읽을 변수 만듦
            while((data = datas.readLine()) != null){ 
                ArrayList<String> al = new ArrayList<>(); //주소열처리 al리스트 만듦
                String[] arr = data.split(","); //주소열 처리 al 어래이 만듦
                //데이터를 집어넣음
                for(int i=0;i<arr.length;i++){
                    al.add(arr[i]);
                }
                all.add(al);
                
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(datas != null) try{ datas.close();} catch(IOException e){}
        }
    }
}

import java.io.*;
import java.util.ArrayList;

public class Search {
    DataSet dataset = new DataSet(); //데이터클래스 불러오기
    BufferedReader br = null; //finally에서 끄기위해서 메소드 밖에 선언함
    
    //검색 메소드 만들기
    public void SearchMethod() throws Exception{
        while(true){
            br = new BufferedReader(new InputStreamReader(System.in)); //입력값 받기
            System.out.println("동이름 입력 : ");
            
            String dong = br.readLine();
            //입력값이 exit이면 반복문 나오기
            if(dong.equals("exit")){
                break;
            }else{
                //리스트에 것을 검색 하고 출력
                for(ArrayList<String> al : dataset.all){
                    if(al.get(3).indexOf(dong) != -1){
                        System.out.printf("[%s] \t %s \t %s \t %s \t %s \t %s \n",al.get(0),al.get(1),al.get(2),al.get(3),al.get(4),al.get(5));
                    }
                }    
            }
        }

    }
    //Main 부분
    public static void main(String[] args) {
        Search search =new Search();
        try {
            search.SearchMethod();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(search.br != null) try{ search.br.close(); } catch(IOException e){ }
        }
    }

}


댓글 없음:

댓글 쓰기