지구정복

[JAVA] 11/24 (2)| 보조스트림,우편번호 주소 검색프로그램 본문

데이터 엔지니어링 정복/JAVA & JSP

[JAVA] 11/24 (2)| 보조스트림,우편번호 주소 검색프로그램

nooh._.jl 2020. 11. 26. 20:46
728x90
반응형

이어서

 

 

ㅇ보조 스트림

p1028~1032

보조 스트림이란 다른 스트림과 연결되어 여러 가지 편리한 기능을 제공해준다.

즉, 스트림을 여러개 붙일 수 있다.

 

 

ㅇ성능향상 보조 스트림

프로그램의 실행 성능은 입출력이 가장 늦은 장치를 따라간다. 이 문제에 대한 완전 해결책은 될 수 없지만,

프로그램이 입출력 소스와 직접 작업하지 않고 중간에 메모리 버퍼와 작업함으로써 실행 성능을 향상시킬 수 있다.

 

예를들어 프로그램은 직접 하드디스크에 데이터를 보내지 않고 메모리 버퍼에 데이터를 보냄으로써 쓰기 속도가 향상된다.

버퍼는 데이터가 쌓이기를 기다렸다가 꽉 차게 되면 데이터를 한꺼번에 하드 디스크로 보냄으로써 출력 횟수를 줄인다.

 

메모리버퍼를 제공하는 것은

바이트 기반 스트림에는 BufferedInputStream, BufferedOutputStream

문자 기반 스트림에는 BufferedReader, BufferedWriter가 있다.

 

-BufferedInputStream 사용

package FileEx02;

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

public class BufferedEx01 {

	public static void main(String[] args) {
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		
		try {
			fis = new FileInputStream("./test.txt");
			bis = new BufferedInputStream( fis );	//fis를 버퍼인 bis에 집어넣는다.
			
			int data = 0;
			//bis 버퍼 안에 있는 fis를 읽는다.
			while ( (data = bis.read()) != -1 ) {
				System.out.print((char)data);
			}
			System.out.println();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(bis!=null) try { bis.close();} catch(IOException e) {}
			if(fis!=null) try { fis.close();} catch(IOException e) {}
		}
	}
}



123456
abcdef
°¡³ª´?¶?¸¶¹?

 

위에서 fis를 쓰지않고 bis에 한꺼번에 선언할 수 있다.

이러면 밑에 에러처리구문 finally에서 fis를 빼주면 된다.

bis = new BufferedInputStream( new FileInputStream("./test.txt") );

 

 

-패키지 내에 있는 사진파일을 복사해서 새로운 사진 파일로 만들기(Buffered 사용)

package FileEx02;

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 BufferedEx02 {

	public static void main(String[] args) {
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		
		try {
			bis = new BufferedInputStream(new FileInputStream("./earth.jpg"));
			bos = new BufferedOutputStream(new FileOutputStream("./newearth1.jpg"));
			
			int data = 0;
			while ( (data = bis.read()) != -1 ) {
				bos.write(data);
			}
			System.out.println("복사완료");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if( bis != null) try { bis.close(); } catch(IOException e) {}
			if( bos != null) try { bos.close(); } catch(IOException e) {}
		}
	}
}

 

 

-BufferedReader 이용해서 한 줄씩 가져오기

readLine() 메서드를 이용한다. 이는 엔터키 전까지 한 줄로 읽는다.

package FileEx02;

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

public class BufferedEx03 {

	public static void main(String[] args) {
		BufferedReader br = null;
		
		try {
			br = new BufferedReader(new FileReader("./test.txt"));
			
			String data = null;
			while( (data=br.readLine()) != null) {
				System.out.println(data);
			}
			System.out.println();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if( br != null) try { br.close(); } catch (IOException e) {}
		}
	}
}



123456
abcdef
가나다라마바

 

 

-아래 서울 주소 파일을 이용해서 우편번호 검색 프로그램 만들기

예를 들어 java SearchZipcode 신사 를 입력하면

신사1.

...

신사2.

...

와 같이 동이름을  입력하면 동이름이 들어가는 주소들 모두 출력하는 프로그램 만들기

+ 2글자만 입력하는 입력조건

+ 한글만 입력가능한 입력조건

zipcode_seoul_euckr_type2.csv
0.86MB

 

1) 내 코드

package SearchZipcodeEx01;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class SearchZipcode {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("찾으시는 주소를 입력해주세요 (ex: 개포) : ");
		String juso = sc.nextLine();
		
		
		if(juso.length() != 2) {
			System.out.println("2자리가 아닙니다. 프로그램 종료됩니다.");
			System.exit(0);
		} else if ( !juso.matches(".*[ㄱ-ㅎ ㅏ-ㅣ 가-힣]+.*") ) {
			System.out.println("한글만 입력해주세요. 프로그램 종료됩니다.");
			System.exit(0);
		}
		System.out.println();
		BufferedReader bis = null;
		
		try {
			bis = new BufferedReader(
					new FileReader("./zipcode_seoul_euckr_type2.csv"));
			
			String data = null;
			while ( (data = bis.readLine()) != null ) {
				String[] datas = data.split(",");
				if(datas[3].indexOf(juso) != -1) {
					System.out.println(data);
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(bis != null) try { bis.close(); } catch(IOException e) {}
		}
	}
}



찾으시는 주소를 입력해주세요 (ex: 개포) : 12
한글만 입력해주세요. 프로그램 종료됩니다.

찾으시는 주소를 입력해주세요 (ex: 개포) : as
한글만 입력해주세요. 프로그램 종료됩니다.

찾으시는 주소를 입력해주세요 (ex: 개포) : 가나다
2자리가 아닙니다. 프로그램 종료됩니다.

찾으시는 주소를 입력해주세요 (ex: 개포) : 개포

135-806,서울,강남구,개포1동,경남아파트,,1
135-807,서울,강남구,개포1동,우성3차아파트,(1∼6동),2
135-806,서울,강남구,개포1동,우성9차아파트,(901∼902동),3
135-770,서울,강남구,개포1동,주공아파트,(1∼16동),4
135-805,서울,강남구,개포1동,주공아파트,(17∼40동),5
135-966,서울,강남구,개포1동,주공아파트,(41∼85동),6
135-807,서울,강남구,개포1동,주공아파트,(86∼103동),7
135-805,서울,강남구,개포1동,주공아파트,(104∼125동),8
135-807,서울,강남구,개포1동,현대1차아파트,(101∼106동),9
135-805,서울,강남구,개포1동,,565,10
135-806,서울,강남구,개포1동,,649∼651,11
135-807,서울,강남구,개포1동,,652∼653,12
135-810,서울,강남구,개포1동,,660,13
135-241,서울,강남구,개포1동,,,14
135-800,서울,강남구,개포2동,우성8차아파트,(801∼803동),15
135-771,서울,강남구,개포2동,주공아파트,(201∼232동),16
135-800,서울,강남구,개포2동,주공아파트,(301∼325동),17
135-772,서울,강남구,개포2동,주공아파트,(401∼415동),18
135-800,서울,강남구,개포2동,주공아파트,(416∼458동),19
135-992,서울,강남구,개포2동,주공아파트,(501∼506동),20
135-993,서울,강남구,개포2동,주공아파트,(601∼609동),21
135-993,서울,강남구,개포2동,주공아파트,(701∼708동),22
135-800,서울,강남구,개포2동,현대3차아파트,(1∼5동),23
135-800,서울,강남구,개포2동,,94∼108,24
135-801,서울,강남구,개포2동,,138,25
135-802,서울,강남구,개포2동,,139∼140,26
135-800,서울,강남구,개포2동,,152∼156,27
135-802,서울,강남구,개포2동,,157∼169,28
135-800,서울,강남구,개포2동,,170∼177,29
135-803,서울,강남구,개포2동,,178,30
135-800,서울,강남구,개포2동,,179∼180,31
135-993,서울,강남구,개포2동,,181∼185,32
135-994,서울,강남구,개포2동,,186∼187,33
135-804,서울,강남구,개포2동,,188∼189,34
135-242,서울,강남구,개포2동,,,35
135-773,서울,강남구,개포4동,시영아파트,(1∼25동),36
135-809,서울,강남구,개포4동,시영아파트,(26∼30동),37
135-809,서울,강남구,개포4동,우성6차아파트,(1∼8동),38
135-808,서울,강남구,개포4동,현대2차아파트,(200∼220동),39
135-808,서울,강남구,개포4동,,654∼656,40
135-809,서울,강남구,개포4동,,658,41
135-960,서울,강남구,개포4동,,1055,42
135-960,서울,강남구,개포4동,,1057,43
135-960,서울,강남구,개포4동,,1163∼1166,44
135-961,서울,강남구,개포4동,,1167∼1189,45
135-962,서울,강남구,개포4동,,1190∼1218,46
135-963,서울,강남구,개포4동,,1219∼1228,47
135-964,서울,강남구,개포4동,,1229∼1243,48
135-965,서울,강남구,개포4동,,1244∼1268,49
135-961,서울,강남구,개포4동,,1271,50
135-962,서울,강남구,개포4동,,1272,51
135-961,서울,강남구,개포4동,,1273∼1274,52
135-244,서울,강남구,개포4동,,,53
135-543,서울,강남구,개포동,LG자이아파트,(101∼104동),54
135-988,서울,강남구,개포동,SH공사,,55
135-940,서울,강남구,개포동,대청아파트,,56
135-989,서울,강남구,개포동,대청타워,,57
135-797,서울,강남구,개포동,대치아파트,(101∼108동),58
135-544,서울,강남구,개포동,대치아파트,(209∼219동),59
135-240,서울,강남구,개포동,서울강남우체국,,60
135-939,서울,강남구,개포동,서울수서경찰서,,61
135-939,서울,강남구,개포동,,12∼14,62
135-940,서울,강남구,개포동,,18,63
135-240,서울,강남구,개포동,,,64

 

2) 강사님 코드

package SearchZipcodeEx01;

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

public class SearchZipcodeEx1 {

	public static void main(String[] args) {
		//개포로 시작하는 동이름 찾기
		String strDong = "개포";
		
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader("./zipcode_seoul_euckr_type2.csv"));
			
			String address = null;
			while( (address = br.readLine()) != null ) {
				//전체 데이터 출력
				//System.out.println(address);
				String[] addresses = address.split(",");
				//동만 출력하기
				//System.out.println(addresses[3]);
				
				/*
				if (addresses[3].startsWith(strDong)) {
					System.out.println(addresses[3]);
				}
				*/
				if (addresses[3].contains(strDong)) {
					System.out.println(address);
				}
			}
			System.out.println("출력완료");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(br != null) try { br.close(); } catch(IOException e) {}
		}
	}
}

135-806,서울,강남구,개포1동,경남아파트,,1
135-807,서울,강남구,개포1동,우성3차아파트,(1∼6동),2
135-806,서울,강남구,개포1동,우성9차아파트,(901∼902동),3
135-770,서울,강남구,개포1동,주공아파트,(1∼16동),4
135-805,서울,강남구,개포1동,주공아파트,(17∼40동),5
135-966,서울,강남구,개포1동,주공아파트,(41∼85동),6
135-807,서울,강남구,개포1동,주공아파트,(86∼103동),7
135-805,서울,강남구,개포1동,주공아파트,(104∼125동),8
135-807,서울,강남구,개포1동,현대1차아파트,(101∼106동),9
135-805,서울,강남구,개포1동,,565,10
135-806,서울,강남구,개포1동,,649∼651,11
135-807,서울,강남구,개포1동,,652∼653,12
135-810,서울,강남구,개포1동,,660,13
135-241,서울,강남구,개포1동,,,14
135-800,서울,강남구,개포2동,우성8차아파트,(801∼803동),15
135-771,서울,강남구,개포2동,주공아파트,(201∼232동),16
135-800,서울,강남구,개포2동,주공아파트,(301∼325동),17
135-772,서울,강남구,개포2동,주공아파트,(401∼415동),18
135-800,서울,강남구,개포2동,주공아파트,(416∼458동),19
135-992,서울,강남구,개포2동,주공아파트,(501∼506동),20
135-993,서울,강남구,개포2동,주공아파트,(601∼609동),21
135-993,서울,강남구,개포2동,주공아파트,(701∼708동),22
135-800,서울,강남구,개포2동,현대3차아파트,(1∼5동),23
135-800,서울,강남구,개포2동,,94∼108,24
135-801,서울,강남구,개포2동,,138,25
135-802,서울,강남구,개포2동,,139∼140,26
135-800,서울,강남구,개포2동,,152∼156,27
135-802,서울,강남구,개포2동,,157∼169,28
135-800,서울,강남구,개포2동,,170∼177,29
135-803,서울,강남구,개포2동,,178,30
135-800,서울,강남구,개포2동,,179∼180,31
135-993,서울,강남구,개포2동,,181∼185,32
135-994,서울,강남구,개포2동,,186∼187,33
135-804,서울,강남구,개포2동,,188∼189,34
135-242,서울,강남구,개포2동,,,35
135-773,서울,강남구,개포4동,시영아파트,(1∼25동),36
135-809,서울,강남구,개포4동,시영아파트,(26∼30동),37
135-809,서울,강남구,개포4동,우성6차아파트,(1∼8동),38
135-808,서울,강남구,개포4동,현대2차아파트,(200∼220동),39
135-808,서울,강남구,개포4동,,654∼656,40
135-809,서울,강남구,개포4동,,658,41
135-960,서울,강남구,개포4동,,1055,42
135-960,서울,강남구,개포4동,,1057,43
135-960,서울,강남구,개포4동,,1163∼1166,44
135-961,서울,강남구,개포4동,,1167∼1189,45
135-962,서울,강남구,개포4동,,1190∼1218,46
135-963,서울,강남구,개포4동,,1219∼1228,47
135-964,서울,강남구,개포4동,,1229∼1243,48
135-965,서울,강남구,개포4동,,1244∼1268,49
135-961,서울,강남구,개포4동,,1271,50
135-962,서울,강남구,개포4동,,1272,51
135-961,서울,강남구,개포4동,,1273∼1274,52
135-244,서울,강남구,개포4동,,,53
135-543,서울,강남구,개포동,LG자이아파트,(101∼104동),54
135-988,서울,강남구,개포동,SH공사,,55
135-940,서울,강남구,개포동,대청아파트,,56
135-989,서울,강남구,개포동,대청타워,,57
135-797,서울,강남구,개포동,대치아파트,(101∼108동),58
135-544,서울,강남구,개포동,대치아파트,(209∼219동),59
135-240,서울,강남구,개포동,서울강남우체국,,60
135-939,서울,강남구,개포동,서울수서경찰서,,61
135-939,서울,강남구,개포동,,12∼14,62
135-940,서울,강남구,개포동,,18,63
135-240,서울,강남구,개포동,,,64
출력완료

 

728x90
반응형
Comments