본문 바로가기
Web & Mobile/JAVA

Lecture 30 - Java(11) File, InputStream, OutputStream, 보조스트림, FileReader, ZipCode 검색

by Bennyziio 2023. 6. 20.
반응형

FileEx01 continued

import java.io.File;
import java.io.IOException;

public class FileEx01 {

	public static void main(String[] args) {

		// File 생성
		// 파일이나 디렉토리 경로를 통해서 생성
		// 파일이나 디렉토리가 반드시 존재하지 않아도 객체 생성 가능하다
		
		File f1 = new File("c:\\Java");			// windows
		File f2 = new File("c:/Java");			// linux / mac
		File f3 = new File("c:/Java/test.txt");	// 파일명
		File f4 = new File("c:/Java", "test.txt");	// 경로, 파일명
		// 경로명 : 절대경로 / 상대경로(java에서 부터 상대적 위치)
		
		// exist()
		if(f3.exists()) {
			System.out.println("존재");
		} else {
			System.out.println("미존재");
		}
		// f1.isDirectory() - 디렉토리를 물을 때
		if(f1.isFile()) {
			System.out.println("파일");
		} else {
			System.out.println("디렉토리");
		}
		
		File f5 = new File("c:/Java/test.txt");
		if(f5.canWrite()) {
			System.out.println("읽기쓰기");
		} else {
			System.out.println("읽기전용");
		}
		
		// 파일의 위치 정보
		System.out.println(f5.getName());
		System.out.println(f5.getParent());
		System.out.println(f5.getPath());
		System.out.println(f5.getAbsolutePath());
		
		// surround try-catch block
		try {
			System.out.println(f5.getCanonicalPath());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// 파일 속성
		// 크기 / 최종 수정일
		long filesize = f5.length();
		System.out.println(filesize);
		
		// timestamp
		long filedate = f5.lastModified();
		System.out.println(filedate);
		// 실제 시간을 확인
	
	}
}

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

public class FileEx01 {

	public static void main(String[] args) {

		// File 생성
		// 파일이나 디렉토리 경로를 통해서 생성
		// 파일이나 디렉토리가 반드시 존재하지 않아도 객체 생성 가능하다
		
		File f1 = new File("c:\\Java");			// windows
		File f2 = new File("c:/Java");			// linux / mac
		File f3 = new File("c:/Java/test.txt");	// 파일명
		File f4 = new File("c:/Java", "test.txt");	// 경로, 파일명
		// 경로명 : 절대경로 / 상대경로(java에서 부터 상대적 위치)
		
		// exist()
		if(f3.exists()) {
			System.out.println("존재");
		} else {
			System.out.println("미존재");
		}
		// f1.isDirectory() - 디렉토리를 물을 때
		if(f1.isFile()) {
			System.out.println("파일");
		} else {
			System.out.println("디렉토리");
		}
		
		File f5 = new File("c:/Java/test.txt");
		if(f5.canWrite()) {
			System.out.println("읽기쓰기");
		} else {
			System.out.println("읽기전용");
		}
		
		// 파일의 위치 정보
		System.out.println(f5.getName());
		System.out.println(f5.getParent());
		System.out.println(f5.getPath());
		System.out.println(f5.getAbsolutePath());
		
		// surround try-catch block
		try {
			System.out.println(f5.getCanonicalPath());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		// 파일 속성
		// 크기 / 최종 수정일
		long filesize = f5.length();
		System.out.println(filesize);
		
		// timestamp
		long filedate = f5.lastModified();
		System.out.println(filedate);
		// 실제 시간을 확인
	
		Date date = new Date(filedate);
		System.out.println(date.toLocaleString());
	}
}

FileEx02  - 하드디스크 목록

import java.io.File;

public class FileEx02 {

	public static void main(String[] args) {

		// 특정디렉토리 내부의 디렉토리나 파일 목록
		// list				: String[]
		// listFiles		: File[]
		
		File f = new File("c:/");
		String[] lists = f.list();
		
		for(String list : lists) {
			System.out.println(list);
		}
	}
}

import java.io.File;

public class FileEx02 {

	public static void main(String[] args) {

		// 특정디렉토리 내부의 디렉토리나 파일 목록
		// list				: String[]
		// listFiles		: File[]
		
		File f = new File("C:\\app\\kitcoop\\product\\12.1.0\\dbhome_1");
		String[] lists = f.list();
		
		for(String list : lists) {
			System.out.println(list);
		}
	}
}

import java.io.File;

public class FileEx02 {

	public static void main(String[] args) {

		// 특정디렉토리 내부의 디렉토리나 파일 목록
		// list				: String[]
		// listFiles		: File[]
		
		File f = new File("C:\\");
		String[] lists = f.list();
		/*
		for(String list : lists) {
			System.out.println(list);
		}
		*/
		File[] listFiles = f.listFiles();
		for(File listFile : listFiles ) {
			System.out.println(listFile.getName());
		}
	}
}

FileEx03

import java.io.File;

public class FileEx03 {

	public static void main(String[] args) {

		// 파일/디렉토리 생성 / 삭제 / 이름 변경
		
		File f = new File("c:/Java/test1");
		if(f.mkdir()) {
			System.out.println("성공");
		} else {
			System.out.println("실패");
		}
	}
}

test.txt 생성 성공

기존에 이미 만들어져서 실패 출력

import java.io.File;

public class FileEx03 {

	public static void main(String[] args) {

		// 파일/디렉토리 생성 / 삭제 / 이름 변경
		
		File f = new File("c:/Java/test1");
		File f2 = new File("c:/Java/test2");
		//if(f.mkdir()) {
		if(f.renameTo(f2)) {
			System.out.println("성공");
		} else {
			System.out.println("실패");
		}
	}
}

import java.io.File;

public class FileEx03 {

	public static void main(String[] args) {

		// 파일/디렉토리 생성 / 삭제 / 이름 변경
		
		File f = new File("c:/Java/test1");
		File f2 = new File("c:/Java/test2");
		//if(f.mkdir()) {
		//if(f.renameTo(f2)) {
		if(f2.delete()) {
			System.out.println("성공");
		} else {
			System.out.println("실패");
		}
	}
}

import java.io.File;
import java.io.IOException;

public class FileEx03 {

	public static void main(String[] args) {

		// 파일/디렉토리 생성 / 삭제 / 이름 변경
		
		File f = new File("c:/Java/test1");
		File f2 = new File("c:/Java/test2");
		//if(f.mkdir()) {
		//if(f.renameTo(f2)) {
		if(f2.delete()) {
			System.out.println("성공");
		} else {
			System.out.println("실패");
		}
		
		File file = new File("c:/Java/test1.txt");
		
			try {
				if(file.createNewFile()) {
					System.out.println("성공");
				} else {
					System.out.println("실패");
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

if에서 else까지 블록 설정후 Try/catch Block을 하면 쉽게 만들 수 있다

import java.io.File;
import java.io.IOException;

public class FileEx03 {

	public static void main(String[] args) {

		// 파일/디렉토리 생성 / 삭제 / 이름 변경
		
		File f = new File("c:/Java/test1");
		File f2 = new File("c:/Java/test2");

		//if(f.mkdir()) {
		//if(f.renameTo(f2)) {
		/*
		if(f2.delete()) {
			System.out.println("성공");
		} else {
			System.out.println("실패");
		}
		*/
		File file = new File("c:/Java/test1.txt");
		File file2 = new File("c:/Java/test2.txt");
		/*
			try {
				if(file.createNewFile()) {
					System.out.println("성공");
				} else {
					System.out.println("실패");
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		*/
		if(file.renameTo(file2)) {
			System.out.println("성공");
		} else {
			System.out.println("실패");
		}
		
	}
}

FileEx04 - 현재 디렉토리에 속한 파일과 디렉토리의 이름과 크기 등 상세정보를 보여 주는 예제다

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileEx04 {

	public static void main(String[] args) {

		String currDir = System.getProperty("user.dir");
		File dir = new File(currDir);
		
		File[] files = dir.listFiles();
		
		for(int i=0; i < files.length; i++) {
			File f = files[i];
			String name = f.getName();
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mma");
			String attribute = "";
			String size = "";
			
			if(files[i].isDirectory()) {
				attribute = "DIR";
			} else {
				size = f.length() + "";
				attribute = f.canRead()   ? "R" : " ";
				attribute = f.canWrite()  ? "W" : " ";
				attribute = f.isHidden()  ? "H" : " ";
			}
			
			System.out.printf("%s %3s %6s %s\n"
					, df.format(new Date(f.lastModified())), attribute, size, name);
		}	
	}
}

FileSplit - 파일 분할 하는 것

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

	public static void main(String[] args) {

		if(args.length < 2) {
			System.out.println("USAGE : java FileSplit filename SIZE_KB");
			System.exit(0);
		}
		
		final int VOLUME = Integer.parseInt(args[1]) * 1000;
		
		try {
			String filename = args[0];
			FileInputStream fis = new FileInputStream(filename);
			BufferedInputStream bis = new BufferedInputStream(fis);
			
			FileOutputStream fos = null;
			BufferedOutputStream bos = null;
			
			int data = 0;
			int i = 0;
			int number = 0;
			
			while((data = bis.read()) != -1) {
				if(i%VOLUME == 0) {
					if (i != 0) {
						bos.close();
					}
					
					fos = new FileOutputStream(filename + "_." + ++number);
					bos = new BufferedOutputStream(fos);
				}
				bos.write(data);
				i++;
			}
			bis.close();
			bos.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

FileMerge

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

public class FileMerge {

	public static void main(String[] args) {

		if(args.length != 1) {
			System.out.println("USAGE : java FileSplit filename SIZE_KB");
			System.exit(0);
		}
	
		String mergeFilename = args[0];
		
		try {
			File tempFile = File.createTempFile("~mergetemp",  ".tmp");
			tempFile.deleteOnExit();
			
			FileOutputStream fos = new FileOutputStream(tempFile);
			BufferedOutputStream bos = new BufferedOutputStream(fos);
			
			BufferedInputStream bis = null;
			
			int number = 1;
			
			File f = new File(mergeFilename + "_." + number);
			
			while(f.exists()) {
				f.setReadOnly();
				bis = new BufferedInputStream(new FileInputStream(f));
				
				int data = 0;
				while((data = bis.read()) != -1) {
					bos.write(data);
				}
				
				bis.close();
				
				f = new File(mergeFilename + "_." + ++number);
			}
			
			bos.close();
			
			File oldFile = new File(mergeFilename);
			if(oldFile.exists()) {
				oldFile.delete();
			}
			tempFile.renameTo(oldFile);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

File구조등을 직접 개발하려면 무지 힘들다. API를 적극 활용한다.

자바에서의 입출력
I/O란 Input과 Output의 약자로 입력과 출력, 간단히 줄여서 입출력이라고 한다. 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고 받는 것을 말한다.

스트림 - File, Network에 쓰인다
스트림이란 데이터를 운반하는데 사용되는 연결통로이다.
스트림은 단방향통신만 가능하기 때문에 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다. 그래서 입력스트림과 출력스트림 모두 2개의 스트림이 필요하다.
스트림은 큐(queue)와 같이 FIFO 구조이다.

바이트기반 스트림 - InputStream, OutputStream 1바이트씩
아스키기반의 데이터를 주로 처리(영문)
문자기반 스트림 - Reader, Writer 2바이트씩
바이트기반 외 일본어, 한국어 등 문자기반 데이터를 주로 처리

이거롤 저장 안되니 vscode에서 utf-8로 저장해줄 것!

InputStreamEx01

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

public class InputStreamEx01 {

	public static void main(String[] args) {

		// 파일 읽어서 프로그램에 (입력)
		
		FileInputStream fis = null;
		
		try {
			// file open
			fis = new FileInputStream("c:/Java/test.txt");
			
			// byte - int
			int data = 0;
			data = fis.read();
			//System.out.println(data);
			System.out.println((char)data);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// file close
			if(fis != null) try {fis.close();} catch(IOException e) {};
		}
	}

}

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

public class InputStreamEx01 {

	public static void main(String[] args) {

		// 파일 읽어서 프로그램에 (입력)
		
		FileInputStream fis = null;
		
		try {
			// file open
			fis = new FileInputStream("c:/Java/test.txt");
			
			// byte - int
			int data = 0;
			// 첫번째 글자
			data = fis.read();
			//System.out.println(data);
			System.out.println((char)data);
			// 두번째 글자
			data = fis.read();
			System.out.println((char)data);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// file close
			if(fis != null) try {fis.close();} catch(IOException e) {};
		}
	}

}

InputStreamEx02

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

public class InputStreamEx2 {

	public static void main(String[] args) {

		// 파일 읽어서 프로그램에 (입력)
		
		FileInputStream fis = null;
		
		try {
			// file open
			fis = new FileInputStream("c:/Java/test.txt");
			
			int data = 0;
			while((data = fis.read()) != -1) {
				// 엔터키도 문자
				// unix		- \n
				// window 	- \r\n
				//System.out.println((char)data);
				System.out.print((char)data);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// file close
			if(fis != null) try {fis.close();} catch(IOException e) {};
		}
	}

}

공백은 엔터로써 엔터도 문자이다

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

public class InputStreamEx2 {

	public static void main(String[] args) {

		// 파일 읽어서 프로그램에 (입력)
		
		FileInputStream fis = null;
		
		try {
			// file open
			fis = new FileInputStream("c:/Java/test.txt");
			
			int data = 0;
			while((data = fis.read()) != -1) {
				// 엔터키도 문자
				// unix		- \n
				// window 	- \r\n
				if(data == '\r') {
					System.out.println("(r)");
				} else if (data == '\n') {
					System.out.println("(n)");
				} else {
					System.out.println((char)data);
				}
				//System.out.println((char)data);
				//System.out.print((char)data);
			}
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// file close
			if(fis != null) try {fis.close();} catch(IOException e) {};
		}
	}
}

OutputStreamEx01

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

public class OutputStreamEx01 {

	public static void main(String[] args) {

		FileOutputStream fos = null;
		
		try {
			// create or open
			fos = new FileOutputStream("c:/Java/newtest.txt");
			System.out.println("성공");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			if(fos != null)
				try {fos.close();} catch (IOException e) {};
		}
	}
}

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

public class OutputStreamEx01 {

	public static void main(String[] args) {

		FileOutputStream fos = null;
		
		try {
			// create or open
			fos = new FileOutputStream("c:/Java/newtest.txt");
			
			fos.write('1');
			fos.write('2');
			
			System.out.println("성공");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(fos != null)
				try {fos.close();} catch (IOException e) {};
		}
	}
}

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

public class OutputStreamEx01 {

	public static void main(String[] args) {

		FileOutputStream fos = null;
		
		try {
			// create or open
			fos = new FileOutputStream("c:/Java/newtest.txt");
			
			fos.write('1');
			fos.write('2');
			
			fos.write('\r');
			fos.write('\n');
			// ascii code로 49=1, 50=2, 51=3
			fos.write(49);
			fos.write(50);
			fos.write(51);
			
			System.out.println("성공");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(fos != null)
				try {fos.close();} catch (IOException e) {};
		}
	}
}

OutputStreamEx02

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

public class OutputStreamEx02 {

	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 {
				if(fis != null) fis.close();
				if(fos != null) fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

사진, 오디오, 파일 등 다 복사 할 수 있다

보조 스트림
스트림의 기능을 향상시키거나 새로운 기능을 추가할 수 있다. 그래서 보조스트림만으로는 입출력을 처리할 수 없고, 스트림을 먼저 생성한 다음에 이를 이용해서 보조스트림을 생성해야한다.

BufferedInputStreamEx01

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

public class BufferedInputStreamEx01 {

	public static void main(String[] args) {
		FileInputStream fis = null;
		BufferedInputStream bis = null;
		
		try {
			fis = new FileInputStream("c:/Java/test.txt");
			bis = new BufferedInputStream(fis);
			
			int data = 0;
			while((data = bis.read()) != -1) {
				System.out.println((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) {};
		}
	}
}

BufferedOutputStreamEx01

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

public class BufferedOutputStreamEx01 {

	public static void main(String[] args) {
		BufferedOutputStream bos = null;
		try {			
			bos = new BufferedOutputStream(new FileOutputStream("c:/Java/newtest.txt"));
			
			bos.write('a');
			bos.write('b');
			bos.write('c');
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(bos != null) try {bos.close();} catch(IOException e) {};
		}
	}
}

OutputStreamEx02 - 보조 스트림 사용 한 것

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

	public static void main(String[] args) {

		FileInputStream fis = null;
		FileOutputStream fos = null;
		BufferedInputStream bis = null;
		BufferedOutputStream bos = null;
		
		try {
			//fis = new FileInputStream("c:/Java/Koala.jpg");
			//fos = new FileOutputStream("c:/Java/newKoala.jpg");
			bis = new BufferedInputStream(new FileInputStream("c:/Java/Koala.jpg"));
			bos = new BufferedOutputStream(new FileOutputStream("c:/Java/newKoala.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 {
			try {
				if(bis != null) bis.close();
				if(bos != null) bos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

훨씬 속도가 빨라졌다.

FileReaderEx01

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

public class FileReaderEx01 {

	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.println((char)data);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fr.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

2 byte라서 한글이 안깨지고 정상 출력이 된다

FileWriterEx01

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterEx01 {

	public static void main(String[] args) {
		FileWriter fw = null;
		
		try {
			fw = new FileWriter("c:/Java/newtest.txt");
			fw.write("Hello");
			fw.write(" java");
			fw.write("\r\n");
			fw.write("헬로우");
			
			System.out.println("출력완료");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

java Gugudan
시작단수                 : 1단
끝단수                    : 3단
*파일명                    : 1-1.txt

화면이 아닌 gugudan.txt 문서에 저장
1 X 1 = 1 1 X 2 = 2 1 X 3 = 3 ...

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class gugudan {

	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		String begindan = "";
		String enddan = "";
		String guguname = "";
		File f = null;
		FileWriter fw = null;
		try {
			System.out.println("구구단 파일명 : ");
			guguname = scan.nextLine();
			f = new File(guguname);
			//String msgguguname = new String("c:/Java/")+guguname+".txt";
			fw = new FileWriter("c:/Java/" + guguname + ".txt");
			f.createNewFile();
			System.out.println("시작단수 입력 : ");
			begindan = scan.nextLine();
			System.out.println("끝단수 입력 : ");
			enddan = scan.nextLine();
			
			if(!begindan.equals("끝")) {
				int i = Integer.parseInt(begindan);
				//fw = new FileWriter("c:/Java/gugudan.txt");
				//fw = new FileWriter(msgguguname);
					for(int j = 1; j<=Integer.parseInt(enddan); j++) {
						fw.write(i + "x" + j + "=" + i*j);
						fw.write("\r\n");
					}
					System.out.println("생성완료");
			} else {
				System.out.println("종료");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(fw != null) {
				try {
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

BufferedReaderEx01

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

public class BufferedReaderEx01 {

	public static void main(String[] args) {

		BufferedReader br = null;
		
		try {
			br = new BufferedReader(new FileReader("c:/Java/test.txt"));
			/*
			int data = 0;
			while((data = br.read()) != -1) {
				System.out.println((char)data);
			}
			*/
			// br.readLine() - 엔터키까지
			String data = null;
			while((data = br.readLine()) != null) {
				System.out.println(data);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(br != null) {
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

BufferedWriterEx01

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

public class BufferedWriterEx01 {

	public static void main(String[] args) {
		BufferedWriter bw = null;
		
		try {
			bw = new BufferedWriter(new FileWriter("c:/Java/newtest.txt"));
			
			bw.write("Hello");
			bw.write("안녕");
			
			System.out.println("출력완료");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}

ZipCodeSearchEx01 - 배열 사

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

public class ZipCodeSearchEx01 {

	public static void main(String[] args) {
		BufferedReader br = null;		// 입력 받기
		BufferedReader br2 = null;		// csv 파일 입력

		try {		
			// csv 데이터 파일
			br = new BufferedReader(new InputStreamReader(System.in));
			System.out.print("동이름을 입력하시오(동포함) : ");
			br2 = new BufferedReader(new FileReader("C:/Java/zipcode_seoul_utf8_type2.csv"));
			String data = br.readLine();
			
			while(data.length() < 2) {
				System.out.print("입력 값을 2자리 이상으로 해주세요(동포함) : ");
				data = br.readLine();	//동 입력받기(data)
			}
			String postData = null;
			
			while((postData = br2.readLine()) != null) {	//csv에서 받아온 파일을 배열에 저장
				for(int i=1; i<8; i++) {
					String dongs[] = postData.split(",");
					if(i == 4) {
						if(dongs[3].equals(data)) {	// 분리된 동(4번재)와 입력받은 값을 비교
							System.out.println(postData);
						}
					}
				}
			}

			System.out.println("입력한 주소 : " + data);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(br != null) try {br.close();} catch(IOException e) {};
			if(br2 != null) try {br2.close();} catch(IOException e) {};
		}
	}
}

ZipcodeSearch - 강사님이 짰고, sentence.contains 사용

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

public class ZipcodeSearch {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Scanner scan = new Scanner(System.in);
        
        while(true) {
             System.out.print("동이름을 입력하세요. 입력을 마치려면 q를 입력하세요 : ");
             String msg = scan.nextLine();
             if(msg.equals("q")) {
            	 System.out.println("프로그램 종료");
            	 break;
             }
         
             FileReader fr = null;
       
             try {
                  fr = new FileReader("c:/java/zipcode_seoul_utf8_type2.csv");
          
                  int data = 0;
                  String sentence = "";
                  while((data = fr.read()) != -1) {
                       if(data == '\r' || data == '\n') {
                            if(data == '\n') {
                                 if(sentence.contains(msg)) {
                                      System.out.println("line : " + sentence);
                                 }
                                 sentence = "";
                            }
                       } else {
                            sentence += (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(fr != null) try { fr.close(); } catch(IOException e) {}
             }
        }
        scan.close();
	}
}

ZipcodeSearch2 - 강사님이 짠거 2

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

public class ZipcodeSearch2 {

	public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        while(true) {
             System.out.print("동이름을 입력하세요. 입력을 마치려면 q를 입력하세요 : ");
             String msg = scan.nextLine();
             if(msg.equals("q")) {
            	 System.out.println("프로그램 종료");
            	 break;
             }
             
             BufferedReader br = null;
             
             try {
				br = new BufferedReader(new FileReader("C:/Java/zipcode_seoul_utf8_type2.csv"));
				 
				 String sentence = null;
				 while((sentence = br.readLine()) != null) {
					 String[] addresses = sentence.split(",");
					 //System.out.println(addresses[3]);
					 if(addresses[3].contains(msg)) {
						 System.out.println(sentence);
					 }
				 }
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if(br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}
			}
        } 
        scan.close();
	}
}

ZipcodeSearch3 - 강사님이 짠거 - 검색한 결과를 파일로 저장, 한글 입력 조건, 2자리수 이상

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class ZipcodeSearch3 {

	public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        while(true) {
             System.out.print("동이름을 입력하세요. 입력을 마치려면 q를 입력하세요 : ");
             String msg = scan.nextLine();
             if(msg.equals("q")) {
            	 System.out.println("프로그램 종료");
            	 break;
             }
             else if(msg.length() < 2) {
            	 System.out.println("2자 이상으로 입력하셔야 합니다.");
            	 continue;
             }
             // 조건 한글이 아니면 에러
             else if(!msg.matches(".*[ㄱ-ㅎㅏ-ㅣ가-힣]+.*")) {
            	 System.out.println("한글로 입력해 주시기 바랍니다");
             } else {
            	 BufferedReader br = null;
                 BufferedWriter bw = null;
                 
                 try {
    				br = new BufferedReader(new FileReader("C:/Java/zipcode_seoul_utf8_type2.csv"));
    				
    				bw = new BufferedWriter(new FileWriter("C:/Java/" + msg + ".txt"));

    				String sentence = null;
    				while((sentence = br.readLine()) != null) {
    					 String[] addresses = sentence.split(",");
    					 //System.out.println(addresses[3]);
    					 if(addresses[3].contains(msg)) {
    						 //System.out.println(sentence);
    						 bw.write(sentence + "\r\n");
    					 }
    				 }
    				System.out.println("출력이 완료되었습니다.");
    			} catch (FileNotFoundException e) {
    				e.printStackTrace();
    			} catch (IOException e) {
    				e.printStackTrace();
    			} finally {
    				if(br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}
    				if(bw != null) {try {bw.close();} catch (IOException e) {e.printStackTrace();}}
    			}
             }
        } 
        scan.close();
	}
}

 

 

반응형

댓글