지구정복
[JAVA] 11/24 (2)| 보조스트림,우편번호 주소 검색프로그램 본문
이어서
ㅇ보조 스트림
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글자만 입력하는 입력조건
+ 한글만 입력가능한 입력조건
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
출력완료