파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter 클래스의사용법은다음과같다. PrintWriter writer = new PrintWriter("output.txt"); - 생성된 writer 를사용해서 print, println, printf 메소드를사용해서데이터를출력한다. writer.print(12);//12 를문자열로바꾸어서문자열로파일에쓴다. writer.print(10000l);//10000 를문자열로바꾸어서문자열로파일에쓴다. writer.println(1.5);//1.5 를문자열로바꾸고줄바꿈까지포함해서파일에쓴다. 즉, 줄이바뀐다. writer.println(true);//true 를문자열로바꾸고줄바꿈까지포함해서파일에쓴다. 즉, 줄이바뀐다. writer.printf("%d 년 %d 월 %d 일, 2010, 12, 2);//"2010 년 12 월 12 일 " 이라는문자열을파일에쓴다. writer.printf(" 파이 =%4.2f", Math.PI);//" 파이 =3.14" 라는문자열을파일에쓴다. - 위의 printf에사용된 %d는정수가출력되는자리를의미한다. %f는실수가출력되는자리를의미한다. %4.2f는실수를출력하되소수점이하는 2자리이며전체자리수는소수점포함 4자리를의미한다. - 여기서사용된 %d나 %f 등을포맷명세자 (format specifier) 라고한다. - %s는문자열을출력할때사용하는포맷명세자이고 %n은줄을바꿀때사용하는포맷명세자이다. 기타포맷명세자의세부사항은자바라이브러리를참조한다. - 1 -
PrintWriter 클래스의사용예 ) public class PrintWriterTest { public static void main(string[] args){ PrintWriter writer = null; try { writer = new PrintWriter("output.txt"); writer.println(" *** 성적표 *** "); writer.printf("%3s : %3d %3d %3d %5.1f %n", " 홍길동 ", 92, 87, 95, 91.3f); writer.printf("%3s : %3d %3d %3d %5.1f %n", " 김길동 ", 100, 90, 88, 92.7f); writer.printf("%3s : %3d %3d %3d %5.1f %n", " 이길동 ", 75, 88, 85, 82.7f); writer.printf(" 작성일자 : %1$tY년 %1$tm월 %1$td일", new GregorianCalendar()); //%1$ 는첫번째인자를의미한다. 여기서는 new GregorianCalendar() 가첫번째인자 // 예 ) writer.printf("%1$ %2$", first, second); // 위의예에서 %1$ 는 first 를지칭하고, %2$ 는 second 를지칭한다. //ty, tm, td 는 Calendar 클래스의연, 월, 일에해당하는값을표현하기위해사용하는포맷명세자 catch(ioexception e) { System.out.println(" 파일로출력할수없습니다."); finally { try { writer.close();// 파일을닫는다. catch(exception e) { System.out.println(" 파일을닫는중에예외가발생했습니다."); 파일도전과제 - 총정원 5명인학급의학생들의이름과음악, 미술, 체육의데이터를화면에서입력받아서파일로저장하고, 모든데이터의저장이완료되었으면, 다시파일을열고파일에서해당데이터를읽은후개인별총점, 평균그리고학급의총점과평균을구하는프로그램을설계하세요. ( 학생의이름과과목별점수는임의로정하세요. 그리고, 파일의이름및파일관리에사용하는클래스도임의로선택하셔서사용하도록합니다.) - 2 -
파일관리에사용하는 File 클래스 파일에데이터를쓰고, 파일로부터데이터를읽는작업도중요하지만, 파일자체를관리하는일도중요하다. 예를 들어, 파일의크기를알아내거나파일의속성을바꾸는일 ( 즉, 읽기전용의파일로만드는작업 ) 등이이에해당한다. File 클래스는 java.io 패키지에속해있다. File 클래스를사용하면다음과같은정보를알아낼수있다. 1. 파일의크기 2. 파일의이름또는디렉토리의이름 3. 파일의최종수정일자 4. 읽기가능 / 쓰기가능 / 숨김파일등의파일의속성 File 클래스를사용하려면, 우선 File 클래스를다음과같이생성한다. File file = new File("data.txt");// 현재디렉토리에있는 data.txt 파일에대한 File 객체를생성한다. File file = new File("C:\\temp\\data.txt");//C 드라이브의 temp 디렉토리에있는 data.txt 에대한 File 객체생성 File 객체가생성되었으면, 다음이메소드를사용해서파일의상태를알아낸다. Boolean isthere = file.exists();// 해당하는파일혹은디렉토리가존재하면참, 아니면거짓 Boolean isfile = file.isfile();// 해당객체가파일이면참, 아니면거짓 Boolean isdirectory = file.isdirectory();// 해당객체가디렉토리이면참, 아니면거짓 String name = file.getname();// 이름을리턴 long size = file.length();// 크기를리턴 long time = file.lastmodified();// 최종수정일자를리턴.1970년 1월 1일부터경과한시간을 1000분의 1초로저장 boolean readmode = file.canread();// 읽기가능여부리턴 boolean writemode = file.canwrite();// 쓰기가능여부리턴 boolean hiddenmode = file.ishidden();// 숨김여부를리턴 String parent = file.getparent();// 부모디렉토리의이름을리턴 - 3 -
현재디렉토리의하위디렉토리와파일의목록을출력하는예 ) public class FileTest { public static void main(string[] args) { File file = new File(".");// 현재의디렉토리로 File 객체를생성 File files[] = file.listfiles();// 하위디렉토리와파일의목록을읽어온다. for(int i = 0; i < files.length; i++) { String name = files[i].getname(); if(files[i].isfile()) System.out.printf("%-25s %7d ", name, files[i].length()); // 파일이면파일의이름과크기를출력 else System.out.printf(%-25s <DIR> ", name);// 디렉토리이면 <DIR> 만출력 long time = files[i].lastmodified();// 파일의최종수정일자를읽어옴 GregorianCalendar calendar = new GregorianCalendar(); calendar.settimemillis(time); // 읽어온파일의최종수정일자는 1000분의 1초값이므로, 이것을실제날짜로바꾼다. System.out.printf("%1$tF %1$tT %n", calendar); //tf 는날짜의형태를 YYYY-MM-DD 으로설정함을의미하는포맷명세자 //tt 는시간의형태를 HH:MM:SS 으로설정함을의미하는포맷명세자 // 즉, 날짜와시간이 2010-12-02 12:12:12의형태로출력된다. - 4 -
파일의여러가지속성을알아보는예 ) import java.io.*; import java.util.*; class FileInfo { public static void main(string [] args) throws Exception { File file = new File("c:\\temp\\data.txt"); System.out.println(" 파일상세정보 *****" ); System.out.println(" 절대경로 :" + file.getabsolutepath()); System.out.println(" 표준경로 :" + file.getcanonicalpath()); System.out.println(" 생성일 :" + new Date(file.lastModified())); System.out.println( " 파일크기 : " + file.length() ); System.out.println( " 읽기속성 : " + file.canread() ); System.out.println( " 쓰기속성 : " + file.canwrite() ); System.out.println( " 파일경로 : " + file.getparent() ); System.out.println( " 숨김속성 : " + file.ishidden() ); - 5 -