[JAVA] 파일 입출력

merci·2022년 12월 30일
0

JAVA

목록 보기
3/10
  • 난수 100개를 파일에 저장하는 입출력을 만들어보자
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.StringTokenizer;

public class J682_1 {
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		Random r = new Random();
		String strb="";
		 // 난수 100개를 10개씩 한줄에,10줄이 있는 문자열 생성
		for (int i = 0; i < 10; i++) { 
			if(i!=0) {
			strb += "\n";}
			for (int j = 0; j < 10; j++) {
				strb += (r.nextInt(100) + 1) + " ";
			}
		}
		try (BufferedWriter buf = new BufferedWriter(new FileWriter("d:/text.txt"))) {
			buf.write(strb); 
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 여기까지 문자열을 파일에 저장
		
		// 파일에서 숫자를 추출해서 정수배열에 넣기
		try(BufferedReader buf1 = new BufferedReader(new FileReader("d:/text.txt"))){
			String readString;
			int[] inta = new int[100];
			int i=0;
			while((readString = buf1.readLine())!=null) {
				StringTokenizer stk = new StringTokenizer(readString);
				while(stk.hasMoreTokens()) {
					inta[i++]=Integer.parseInt(stk.nextToken());
				} // inta 배열에 100개의 정수 저장
			}
			Arrays.sort(inta);  // 배열을 정렬
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

파일의 내용은




  • 고객정보를 리스트넣어서 파일에 저장하고, 다시 불러와서 정보를 추출해보자. ( 객체저장 )
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class J682_4 {
	public static void main(String[] args) {
		List<Per> list = new ArrayList<>();
		Scanner sc = new Scanner(System.in);
		while(true) {
			System.out.println("번호 이름 전화번호 이메일입력 q누르면 입력 종료");
			String str1 = sc.next();
			if(str1.equals("q"))break;
			String str2 = sc.next();
			String str3 = sc.next();
			String str4 = sc.next();
			list.add(new Per(str1, str2, str3, str4));
		}
		
		try(ObjectOutputStream obj = new ObjectOutputStream
        								(new FileOutputStream("d:/text.dat"));
			  ObjectInputStream obj1 = new ObjectInputStream
              							(new FileInputStream("d:/text.dat"))){
			obj.writeObject(list);  // 리스트를 파일에 출력( 직렬화 )
			System.out.println("번호 입력 >> 그 번호의 전화번호가 출력됩니다.");
			int num = Integer.parseInt(sc.next()) ;
            // 파일에서 리스트를 추출 ( 역직렬화 )
			List<Per> list1 = (List<Per>)obj1.readObject();  
			System.out.println("입력하신 번호의 전화번호는 " 
            							+ list1.get(num-1).getPhone()); 
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
class Per implements Serializable { 
 						// implements Serializable 를 붙여야 직렬화가 가능하다
	String num;
	String name;
	String phone;
	String email;
	public Per(String num, String name, String phone, String email) {
		super();
		this.num = num;
		this.name = name;
		this.phone = phone;
		this.email = email;
	}
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
}

결과는

번호 이름 전화번호 이메일입력 q누르면 입력 종료
1
우상혁
0102445
eff@fef
번호 이름 전화번호 이메일입력 q누르면 입력 종료
2
김태형
0103624
efg@kksr
번호 이름 전화번호 이메일입력 q누르면 입력 종료
3
이수연
0104669
jkrt@kjt
번호 이름 전화번호 이메일입력 q누르면 입력 종료
q
번호 입력 >> 그 번호의 전화번호가 출력됩니다.
3
입력하신 번호의 전화번호는 0104669





  • 파일클래스 이용해보자
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

public class Serv {
	public static void main(String[] args) {
		File dir = new File("F:\\Microsoft VS Code");
		File[] dir1 = dir.listFiles();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd a hh:mm");
		System.out.println("날짜            시간        형태     크기            이름");
		System.out.println("------------------------------------------------------");
		Arrays.stream(dir1).forEach((e) -> System.out
				.println(sdf.format(new Date(e.lastModified())) 
                				+ isdirec(e) + fileleng(e) + e.getName()));
	}

	public static String isdirec(File f) {
		if (f.isDirectory()) {
			return "\t<DIR>\t";
		} else {
			return "\t\t";
		}
	}

	public static String fileleng(File f) {
		if (f.length() != 0) {
			if (String.valueOf(f.length()).length() > 7) {
				return String.valueOf(f.length()) + "\t";
			} else
				return String.valueOf(f.length()) + "\t\t";
		} else {
			return "\t\t";
		}
	}
}

결과

profile
작은것부터

0개의 댓글

Powered by GraphCDN, the GraphQL CDN