File
: 파일은 가장 많이 사용되는 입출력 대상이다.
자바에서는 File클래스를 통해서 파일과 디렉토리를 다룬다.
그래서 File 인스턴스는 파일 일 수도 있고 디렉토리일 수도 있다.
💡File의 생성자와 메소드
생성자 / 메서드 | 설 명 |
File(String fileName) | 주어진 문자열(fileName)을 이름으로 갖는 파일을 위한 File인스턴스를 생성한다. 파일 뿐만 아니라 디렉토리도 같은 방법으로 다룬다. 여기서 fileName은 주로 경로(path)를 포함해서 지정해주지만, 파일 이름만 사용해도 되는데 이 경우 프로그램이 실행되는 위치가 경로(path)로 간주된다. |
File(String pathName, String fileName) File(File pathName, String fileName) |
파일의 경로와 이름을 따로 분리해서 지정할 수 있도록 한 생성자. 이 중 두 번째 것은 경로를 문자열이 아닌 File인스턴스인 경우를 위해서 제공된 것이다. |
File(URI uri) | 지정된 uri로 파일을 생성 |
String getName() | 파일이름을 String으로 반환 |
String getPath() | 파일의 경로(path)를 String으로 반환 |
String getAbsolutePath() File getAbsoluteFile() |
파일의 절대경로를 String으로 반환 파일의 절대경로를 File로 반환 |
String getParent() File getParentFile() |
파일의 조상 디렉토리를 String으로 반환 파일의 조상 디렉토리를 File로 반환 |
String getCanonicalPath() File getCanonicalFile() |
파일의 정규경로를 String으로 반환 파일의 정규경로를 File로 반환. |
💡경로와 관련된 File의 멤버변수
멤버변수 | 설 명 |
static String pathSeperator | OS에서 사용하는 경로(path) 구분자. 왼도우 ";" , 유닉스 ":" |
static char pathSeparatorChar | OS에서 사용하는 경로(path) 구분자. 윈도우에서는 ";". 유닉스 ":" |
static String separator | OS에서 사용하는 이름 구분자. 윈도우 "\", 유닉스 "|" |
static String separatorChar | OS에서 사용하는 이름 구분자. 윈도우 "\", 유닉스 "|" |
- 위 표에서 알 수 있듯이 파일의 경로와 디렉토리나 파일의 이름을 구분하는 데 사용되는 구분자가 OS마다 다를 수 있기 때문에, OS독립적으로 프로그램을 작성하기 위해서는 반드시 위 표의 변수들을 이용해야한다.
만일 윈도우에서 사용하는 구분자를 코드를 직접 적어 놓았다면, 이 코드는 다른 OS에서는 오류를 일으킬 수 있다.
💡 파일의 경로
✔️ 절대경로 (absolute path) : 파일시스템의 루트(root)로부터 시작하는 파일의 전체경로를 의미한다.
OS에 따라 다르지만, 하나의 파일에 대해 둘 이상의 절대경로가 존재할 수 있다.
현재 디렉토리를 의미하는 '.'와 같은 기호나 링크를 포함하고 있는 경우가 이에 해당한다.
예를 들어 'C:\jdk1.8\work\ch15\FileEx1.java'의 또 다른 절대 경로는 'C:\jdk1.8\work\ch15\.\FileEx1.java'가 있다.
✔️정규경로(canonical path) : 정규경로는 기호나 링크 등을 포함하지 않는 유일한 경로를 의미한다.
절대 경로는 둘 이상일 수 있지만 정규경로는 단 하나 뿐이다.
예를 들어 'C:\jdk1.8\work\ch15\FileEx1.java'의 정규경로는 'C:\jdk1.8\work\ch15\FileEx1.java' 한 개 뿐이다.
✔️시스템 속성 중에서 user.dir의 값을 확인하면 현재 프로그램이 실행 중인 디렉토리를 알 수 있다.
✔️JDK1.2이후 부터는 JDK설치 이후에 classpath를 따로 지정해주지 않아도 sun.boot.class.path라는 시스템 속성에 기본적인 classpath가 있어서 기본적인 경로들은 이미 설정되어 있다.
💡File 클래스 사용시 주의할 점
File인스턴스를 생성했다고 해서 파일의 디렉토리가 생성되는 것은 아니다.
파일명이나 디렉토리명으로 지정된 문자열이 유효하지 않더라도 컴파일 에러나 예외를 발생시키지않는다.
새로운 파일을 생성하기 위해서는 File인스턴스를 생성한 다음, 출력스트림을 생성하거나 createNewFile()을 호출해야한다.
💡파일 생성 예시
// 1. 이미 존재하는 파일을 참조할 때 :
File f = new File("c:\\jdk1.8\\work\\ch15", "FileEx1.java");
// 2. 기존에 없는 파일을 새로 생성할 때
File f = new File("c:\\jdk1.8\\work\\ch15", "NewFile.java");
f.createNewFile(); // 새로운 파일이 생성된다.
💡File의 메소드들 (Java SE & JDK 20)
https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/io/File.html#method-summary
File (Java SE 20 & JDK 20)
All Implemented Interfaces: Serializable, Comparable An abstract representation of file and directory pathnames. User interfaces and operating systems use system-dependent pathname strings to name files and directories. This class presents an abstract, sys
docs.oracle.com
💡선택한 디렉토리(폴더)에 포함된 파일과 디렉토리의 목록을 보여주는 예제
import java.io.File;
public class FileEx2 {
public static void main(String[] args) {
if(args.length != 1){
System.out.println("USAGE : java FileEx2 DIRECTORY");
System.exit(0);
}
File f = new File(args[0]);
if(!f.exists() || !f.isDirectory()){
System.out.println("유효하지 않은 디렉토리입니다.");
System.exit(0);
}
File[] files = f.listFiles();
for(int i = 0; i < files.length; i ++){
String fileName = files[i].getName();
System.out.println(files[i].isDirectory() ? "["+fileName+"]" : fileName);
}
}
}
- 실행결과 -
user@user src % java FileEx2.java
USAGE : java FileEx2 DIRECTORY
user@user src % java FileEx2.java work
유효하지 않은 디렉토리입니다.
user@user src % java FileEx2.java /Users/user/Documents/workspace/theStandardOfJAVA
[out]
theStandardOfJAVA.iml
[.idea]
[src]
728x90
반응형
'개발 공부 > Java & Spring' 카테고리의 다른 글
스프링에서 예외처리를 하는 방법 (ExceptionHandler, RestControllerAdvice) (0) | 2024.08.23 |
---|---|
DTO vs Map 장점과 단점은? (1) | 2024.08.14 |
26. 표준 입출력과 RandomAccessFile (0) | 2023.04.16 |
25. 문자기반의 보조스트림 (0) | 2023.04.09 |
24. Collector 구현하기 (0) | 2023.03.29 |