File 클래스

by 조쉬 posted Sep 13, 2016
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

File 클래스


자바에서는 File 클래스를 통해서 파일과 디렉터리를 다룰 수 있도록 하고 있다. 그래서 File 인스턴스는 파일 일 수도 있고 디렉터리 일 수도 있다.


1. File 클래스 API


- 경로와 관련된 File의 멤버변수

 멤버변수

 설명

 static String pathSeparator

 OS에서 사용하는 경로 구분자. 윈도우";", 유닉스":"

 static char pathSeparatorChar

 OS에서 사용하는 경로 구분자. 윈도우';', 유닉스':'

 static String separator

 OS에서 사용하는 이름 구분자. 윈도우"\", 유닉스"/"

 static char separatorChar

 OS에서 사용하는 이름 구분자. 윈도우'\', 유닉스'/'


import java.io.*;


class FileEx1

{

public static void main(String[] args) throws IOException

{

File f = new File("c:\\jdk1.5\\work\\ch14\\FileEx1.java");

String fileName = f.getName();

int pos = fileName.lastIndexOf(".");


System.out.println("경로를 제외한 파일이름 - " + f.getName());

System.out.println("확장자를 제외한 파일이름 - " + fileName.substring(0,pos));

System.out.println("확장자 - " + fileName.substring(pos+1));


System.out.println("경로를 포함한 파일이름 - " + f.getPath());

System.out.println("파일의 절대경로        - " + f.getAbsolutePath());

System.out.println("파일이 속해 있는 디렉토리 - " + f.getParent());

System.out.println();

System.out.println("File.pathSeparator - " + File.pathSeparator); // 파일 전체 path 구분자. ;

System.out.println("File.pathSeparatorChar - " + File.pathSeparatorChar);

System.out.println("File.separator - " + File.separator); // 디렉터리 구분다. /

System.out.println("File.separatorChar - " + File.separatorChar);

System.out.println();

System.out.println("user.dir="+System.getProperty("user.dir"));

System.out.println("sun.boot.class.path=" + System.getProperty("sun.boot.class.path"));

}

}

실행결과)

경로를 제외한 파일이름 - FileEx1.java

확장자를 제외한 파일이름 - FileEx1

확장자 - java

경로를 포함한 파일이름 - c:\jdk1.5\work\ch14\FileEx1.java

파일의 절대경로        - c:\jdk1.5\work\ch14\FileEx1.java

파일이 속해 있는 디렉토리 - c:\jdk1.5\work\ch14


File.pathSeparator - ;

File.pathSeparatorChar - ;

File.separator - \

File.separatorChar - \


user.dir=E:\Eclipse_Source\JAVA\My_Lib

sun.boot.class.path=C:\Program Files (x86)\Java\jre6\lib\resources.jar;C:\Program Files (x86)\Java\jre6\lib\rt.jar;C:\Program Files (x86)\Java\jre6\lib\sunrsasign.jar;C:\Program Files (x86)\Java\jre6\lib\jsse.jar;C:\Program Files (x86)\Java\jre6\lib\jce.jar;C:\Program Files (x86)\Java\jre6\lib\charsets.jar;C:\Program Files (x86)\Java\jre6\lib\modules\jdk.boot.jar;C:\Program Files (x86)\Java\jre6\classes


File 인스턴스를 생성하고 메서드를 이용해서 파일의 경로와 구분자 등의 정보를 출력하는 예제이다.

cp.) OS의 시스템 변수로 설정하는 classpath외에 sun.boot.class.path라는 시스템속성에 기본적인 classpath가 있어서 기본적인 경로들은 이미 설정되어 있다. 

그리고 한가지 더 알아 둘 것은 File 인스턴스를 생성했다고 해서 파일이나 디렉터리가 생성되는 것은 아니라는 것이다.

파일명이나 디렉터리명으로 지정된 문자열이 유효하지 않더라도 컴파일 에러나 예외를 발생시키지 않는다.

새로운 파일을 생성하기 위해서는 File 인스턴스를 생성한 다음, 출력스트림을 생성하거나 createNewFile()을 호출해야 한다.


1 이미 존재하는 파일을 참조할 때

File f = new File("c:\\jdk\\work\\ch14", "File1.java");


2. 기존에는 없는 파일을 새로 생성할 때

File f = new File("c:\\jdk\\work\\ch14", "File2.java");

f. createNewFile(); //새로운 파일이 생성된다.


(1) 예제1

1) File 클래스

File(.txt)가 자바 프로그래밍에서 사용되기 위해서는 객체로 되어있어야 사용할수 있다.

--> File클래스가 파일을 자바 프로그램의 객체로 변환시켜준다.

 Exam_01.java 파일 자바에서 사용하기 위한 객체화 작업

import java.io.File;


public class Exam_02 {

public static void main(String[] ar) {

File f = new File("Exam_01.java");// 존재하든 관계없이 파일 객체 생성 가능

File f1 = new File("Exam_03.java");// 존재 안하든 관계없이 파일 객체 생성 가능

File f2 = new File("C:" + File.separator + "test" + File.separator + "lecture\\Exam_02.java");

File dir = new File("E:\\Eclipse_Source\\JAVA\\Java_KSH\\io");

File f3 = new File(dir, "Exam_04.java");

File f4 = new File("E:\\Eclipse_Source\\JAVA\\Java_KSH\\io", "Exam_05.java");

}

}


2) 예제2

import java.io.File;

import java.util.Date;


public class Exam_04 {

public static void main(String[] ar) {

File f = new File("aaa");

// 폴더 만들기

f.mkdir();

File ff = new File("bbb/ccc/ddd/eee");

// 복수의 폴더 만들기

ff.mkdirs();

//File fff = new File("Exam_01");

// 수정일자 변경

f.setLastModified(new Date().getTime());

f.setReadOnly();

//ff.setLastModified(new Date().getTime());

}

}


3) 예제3

import java.io.File;

import java.io.FileDescriptor;

import java.io.FileOutputStream;

import java.io.IOException;


public class Exam_05 {

public static void main(String[] ar) throws IOException {

// 출력 객체 만들기, FileDescriptor.out: 콘솔에 출력하기

FileOutputStream fos1 = new FileOutputStream(FileDescriptor.out);// 파일 객체, network 객체

File f = new File("C:\\test\\aaa.txt");

// 두번째 매개변수에 true면 덮어쓰기 하지 않고 내용이 추가된다.

FileOutputStream fos2 = new FileOutputStream(f, true);

byte[] by = new byte[]{'H', 'e', 'l', 'l', 'o', ' ', 'J', 'a', 'v', 'a'};


fos1.write(by, 6,4); 

// index[6]에서 부터 4번째 문자열 출력

fos2.write(by);

fos1.write(65);

fos1.close();

fos2.close();

}

}


4) 예제4

import java.io.BufferedInputStream;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;


public class Exam_08 {

public static void main(String[] ar) throws IOException {

File f = new File("C://test/bbb.txt");

FileInputStream fis = new FileInputStream(f);

BufferedInputStream bis = new BufferedInputStream(fis, 1024);

DataInputStream dis = new DataInputStream(bis);

while(true) {

int x = dis.read();

if(x == -1) break;

System.out.print(x);

}

dis.close();

}

}


5) 예제5
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class Exam_09 {
public static void main(String[] ar) throws IOException {
//System.out.println("test 안녕하세요...");
//FileOutputStream fos = new FileOutputStream(FileDescriptor.out);
// 출력 대상은 콘솔뿐만 아니라 웹, 서블릿, jsp에서 출력할 수 있는 객체가 OutputStreamWriter이다.
OutputStreamWriter osw = new OutputStreamWriter(System.out);
BufferedWriter bw = new BufferedWriter(osw, 1024);
// write 뿐만 아니라 다양한 메서드 사용할 수 있다.
PrintWriter pw = new PrintWriter(bw);
File f = new File("C://test/ccc.txt");
// 출력대상이 파일이다, 출력은 파일이 자동 생성되어 출력이 된다.
FileWriter fw = new FileWriter(f);
BufferedWriter bw1 = new BufferedWriter(fw, 1024);
PrintWriter pw1 = new PrintWriter(bw1);
pw.println(10);
pw.println("test 안녕하세요!");
pw1.println(10);
pw1.println("test 안녕하세요!");
pw.close();
pw1.close();
}
}


6) ★ 예제6★ 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStreamReader;


public class Exam_10 {

public static void main(String[] ar) throws IOException {

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

// 한줄로 요약

//BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

File f = new File("C://test/ccc.txt");

FileReader fr = new FileReader(f);

BufferedReader br1 = new BufferedReader(fr);

System.out.print("문자열 = ");

String str = br.readLine();

System.out.println("str = " + str);

System.out.print("숫자 = ");

int x = Integer.parseInt(br.readLine());

System.out.println("x = " + x);

System.out.println("==================================");

while(true) {

// 개행하며 한 줄씩 읽어들이기

String s = br1.readLine();

if(s == null) break;

System.out.println("s = " + s);

}

br.close();

br1.close();

}

}