[Java] File 클래스
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();
}
}
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();
}
}
출처: https://devbox.tistory.com/entry/Java-File-클래스?category=574549 [장인개발자를 꿈꾸는 :: 기록하는 공간]
'JAVA > Java' 카테고리의 다른 글
[Java] 쓰레드 그룹 (0) | 2020.02.20 |
---|---|
[Java] 쓰레드의 우선순위 (0) | 2020.02.20 |
[Java] 쓰레드 기본 (0) | 2020.02.20 |
[Java] 직렬화 (0) | 2020.02.20 |
[Java] 문자 기반 스트림 (0) | 2020.02.20 |
[Java] 바이트 기반의 스트림 (0) | 2020.02.18 |
[Java] 파일I/O 개요 (0) | 2020.02.18 |
[Java] 제네릭 (0) | 2020.02.18 |