명품자바프로그래밍 Chapter8_Lab07
실습1| 연락처 정보 저장 및 출력 ( PhoneSave.java, PhoneOpen.java)
import java.io.*;
import java.util.*;
public class PhoneSave {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
FileWriter fout = null; //FileWriter 초기화
try {
fout = new FileWriter("c:\\temp\\phone.txt"); //파일과 연결된 출력 문자 스트림 생성
System.out.println("전화번호 입력 프로그램입니다.");
while(true) { //그만을 입력할 때 까지
System.out.print("이름 전화번호 >> ");
String name = scan.next();//이름 입력받기
if (name.equals("그만")) //그만 입력하면 탈출
break;
String p_num = scan.next(); //전화번호 입력받기
fout.write(name+" "+p_num+"\r\n"); //한줄 띄어쓰기 후에 저장
}
fout.close();scan.close();
}
catch(IOException e){
System.out.println("입출력 오류");
}
}
}
import java.io.*;
public class PhoneOpen {
public static void main(String[] args) {
FileReader fin = null;
try {
fin = new FileReader("c:\\temp\\phone.txt");//파일로부터 입력 스트림 생성
int c;
System.out.println("c:\\temp\\phone.txt를 출력합니다.");
while((c = fin.read())!= -1) { //한문자 씩 파일 끝까지 읽기, 문자 단위로 읽기
System.out.print((char)c); //문자 단위로 출력
}
fin.close();
}
catch (Exception e){
System.out.println("입출력 오류");
}
}
}
실습4| 파일에 라인번호 붙이기
import java.util.Scanner;
import java.io.*;
public class FileLineNumber {
public static void main(String[] args) {
System.out.println("c:\\windows\\system.ini 파일을 읽어 출력합니다.");
try {
FileReader fin = new FileReader("c:\\windows\\system.ini"); //파일로부터 입력 스트림 생성
Scanner scan = new Scanner(fin); //FileReader fin 객체를 매개변수로 하는 Scanner 객체를 생성
int line_num = 1; //라인번호
while(scan.hasNext()) { //토큰이 있으면 true
String file_line = scan.nextLine(); //nextLine을 사용해서 한줄 씩 입력 받는다.
System.out.printf("%4d",line_num); //라인번호 출력
System.out.println(": "+ file_line); //내용 출력
line_num++;
}
scan.close();
}
catch (IOException e){
System.out.println("입출력 오류");
}
}
}
실습6| 파일 두개를 하나의 파일로 Append
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class FileAppend {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
FileReader fr1 = null;
FileReader fr2 = null;
FileWriter fw = null;
System.out.println("전체 경로명이 아닌 파일이름만 입력하는 경우, 파일은 프로젝트 폴더에 있어야 합니다.");
System.out.print("첫번째 파일 이름을 입력하세요>>");
String search_file1 = scan.nextLine(); //첫번째 파일 이름 입력받기
System.out.print("두번째 파일 이름을 입력하세요>>");
String search_file2 = scan.nextLine(); //두번 째 파일 이름 입력받기
System.out.print("합치는 파일 이름을 입력하세요>>");
String append_file = scan.nextLine(); //합치는 파일 이름 입력받기
scan.close();
int c;
try {
fr1 = new FileReader(search_file1); //첫번째 파일로부터 입력 스트림 생성
fw = new FileWriter(append_file); //합치는 파일로부터 입력 스트림 생성
while ((c = fr1.read())!= -1) { //한문자 씩 파일 끝까지 읽기, 문자 단위로 입력
fw.write((char)c); //문자 단위로 쓰기
}
fw.write("\n"); //첫번째 파일 입력한 다음에 줄바꿔주기
fr2 = new FileReader(search_file2); //두번째 파일로부터 입력 스트림 생성
while ((c = fr2.read())!= -1) { //한문자 씩 파일 끝까지 읽기, 문자 단위로 입력
fw.write((char)c); //문자 단위로 쓰기
}
fr1.close();
fr2.close();
fw.close();
System.out.println("프로젝트 폴더 밑에 "+ append_file + " 파일에 저장하였습니다.");
}
catch (IOException e){
System.out.println("입출력 오류");
}
}
}
실습8| 파일 중에서 가장 큰 파일의 이름과 크기 출력
import java.io.File;
public class FileSize {
public static void main(String[] args) {
File f = new File("c:\\"); //c:\에 있는 파일에 대한 file 클래스 생성
File[] subfiles = f.listFiles(); //메소드 listFiles() 사용 -> c:\ 에 있는 파일 및 서브디렉터리 리스트 얻기
long b_size = 0; //size비교 변수
File b_file = null; //b_size 객체 초기화
for(int i =0;i<subfiles.length;i++) { //c:\에 있는 파일 및 서브디렉터리의 개수만큼 반복
long size = subfiles[i].length(); //파일의 길이 얻어내기
if (subfiles[i].isFile()) {//파일 사이즈만 얻어내야하므로 파일일 경우
if(b_size < size) { //해당 번째의 파일의 길이가 더 클경우
b_size = size; //파일 크기 저장
b_file = subfiles[i]; //파일 이름 저장
}
}
}
if ( b_file == null) //전부다 디렉터리인 경우
System.out.println("파일이 없습니다. 다 디렉터리입니다.");
else //가장 큰 파일이 있는 경우
System.out.println("가장 큰 파일은 "+ b_file.getPath()+ " " + b_size+ "바이트"); //.getPath()메소드로 경로명 출력, b_size는 크기 출력
}
}
실습10| 전화 번호 찾기 파일
import java.io.File;
public class FileSize {
public static void main(String[] args) {
File f = new File("c:\\"); //c:\에 있는 파일에 대한 file 클래스 생성
File[] subfiles = f.listFiles(); //메소드 listFiles() 사용 -> c:\ 에 있는 파일 및 서브디렉터리 리스트 얻기
long b_size = 0; //size비교 변수
File b_file = null; //b_size 객체 초기화
for(int i =0;i<subfiles.length;i++) { //c:\에 있는 파일 및 서브디렉터리의 개수만큼 반복
long size = subfiles[i].length(); //파일의 길이 얻어내기
if (subfiles[i].isFile()) {//파일 사이즈만 얻어내야하므로 파일일 경우
if(b_size < size) { //해당 번째의 파일의 길이가 더 클경우
b_size = size; //파일 크기 저장
b_file = subfiles[i]; //파일 이름 저장
}
}
}
if ( b_file == null) //전부다 디렉터리인 경우
System.out.println("파일이 없습니다. 다 디렉터리입니다.");
else //가장 큰 파일이 있는 경우
System.out.println("가장 큰 파일은 "+ b_file.getPath()+ " " + b_size+ "바이트"); //.getPath()메소드로 경로명 출력, b_size는 크기 출력
}
}
+추가 과제
1| MovieTest 에 파일 저장/ 파일 열기 기능 추가
import java.util.Scanner;
import java.util.Vector;
import java.io.*;
class Movie implements Serializable {
String title; //제목
String director; //감독
String genre; //장르
int release; //개봉연도
public Movie(String title, String director, String genre, int release) { //생성자
this.title = title;
this.director = director;
this.genre = genre;
this.release = release;
}
public String getTitle() { //각각의 Setter 와 Getter 생성
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public int getRelease() {
return release;
}
public void setRelease(int release) {
this.release = release;
}
@Override
public String toString() { //toString으로 문자열 반환 (2번 menu에서 사용할 string)
return "[제목 :" + title + ", 감독:"+ director +", 장르:" + genre + ", 개봉년도:"+ release+"]";
}
}
public class MovieTest {
public static void main(String[] args) throws Exception {
Vector<Movie> v = new Vector<>(); //Vector 컬렉션 사용
Scanner scan = new Scanner(System.in); //Scanner 선언
while(true) {
System.out.println("===========영화 정보 관리===========");
System.out.print("1.영화 입력/2.영화 출력/3.영화 검색/4.파일 저장/5.파일 열기/6. 종료\n메뉴입력>> ");
int n = scan.nextInt(); // 메뉴입력 저장
String a = scan.nextLine(); //개행문자 받아주는 코드
if (n ==6) break; //6번 일 경우 종료
if (n==1) { //1번 메뉴를 선택했을 경우
System.out.print("제목:");
String title = scan.nextLine();
System.out.print("감독:");
String director = scan.nextLine();
System.out.print("장르:");
String genre = scan.nextLine();
System.out.print("년도:");
int release = scan.nextInt();
Movie m = new Movie(title,director,genre,release); // 입력받은 정보를 토대로 Movie 객체 생성
v.add(m); // Vector에 해당 Movie 객체 삽입
}
else if(n==2) { //2번 메뉴를 선택했을 경우
for(int i =0; i<v.size();i++) { //movie 객체의 개수 만큼 print
Movie m = v.get(i); //벡터에서 i번째 Movie 객체얻어내기
System.out.println(m); //m.toString()을 이용해서 객체 m출력
}
}
else if (n==3) {//3번 메뉴를 선택했을 경우
System.out.print("검색할 제목 입력:");
String Searchtitle = scan.nextLine();
for(int i =0;i<v.size(); i++) { //기존에 저장된 Movie객체와 입력한 제목이랑 비교
Movie m = v.get(i); //Vector의 i번째 객체를 Movie m 에 저장
if(Searchtitle.equals(m.getTitle())) { //입력한 title이 Movie 객체의 title과 같을 경우
System.out.println(m);
break;
}
if (i == v.size()-1 && !Searchtitle.equals(m.getTitle())) // 반복문의 마지막번째 까지 도달했을경우, 그리고 검색결과 false일 경우
System.out.println("검색한 제목의 영화가 없습니다."); //검색한 제목의 영화가 없음
}
}
else if (n==4) {//4번 메뉴를 선택했을 경우
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("movie.dat"));
oos.writeObject(v); //현재 저장된 Vector를 oos에 쓰기 movie.dat에 저장
oos.close();
System.out.println("movie.dat에 저장되었습니다.");
}
else if (n==5) {//5번 메뉴를 선택했을 경우
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("movie.dat"));
v = (Vector <Movie>)ois.readObject(); //Movie type으로 type casting 하기
System.out.println("movie.dat로부터 정보를 불러왔습니다.");
ois.close();
}
}
scan.close();
}
}
'Programming > JAVA' 카테고리의 다른 글
자바 GUI 기초, AWT와 스윙 (0) | 2020.12.30 |
---|---|
자바 기말 플젝 코드(미완성) (0) | 2020.12.30 |
제너릭과 컬렉션 (0) | 2020.10.16 |
패키지 개념과 자바 기본 패키지 (0) | 2020.10.16 |
상속 (0) | 2020.10.16 |
댓글