본문 바로가기
코딩/JAVA

File 클래스_자바의정석

by letsgoit39 2021. 8. 3.
728x90

File의 생성자와 경로와 관련된 메서드

생성자/메서드 설명
File(String fileName) 주어진 문자열(fileNmae)을 이름으로 갖는 파일을 위한
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 pathSeparator OS에서 사용하는 경로(path) 구분자.
- 윈도우 ";"
- 유닉스 ":"
static char pathSeparatorChar OS에서 사용하는 경로(path) 구분자.
- 윈도우 ':'
- 유닉스 ';'
static String separator OS에서 사용하는 이름 구분자.
- 윈도우 "\"
- 유닉스 "/"
static char separatorChar OS에서 사용하는 이름 구분자.
- 윈도우 '\'
- 유닉스 '/'

절대경로VS정규경로

절대 경로(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'

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.io.*;
 
class FileEx1 {
    public static void main(String[] args) throws IOException
    {
        File f = new File("c:\\jdk1.8\\work\\ch15\\FileEx1.java");
        //1. 경로와 이름 따로 지정해서 인스턴스를 생성하는 생성자 사용
        File f1 = new File("c:\\jdk1.8\\work\\ch15""FileEx1.java");
        //2. 경로와 이름 따로
        File dir = new File("c:\\jdk1.8\\work\\ch15");
        File f2 = new File(dir, "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.getCanonicalPath());
        System.out.println("파일이 속해 있는 디렉토리 - "    + f.getParent());
        System.out.println();
        System.out.println("File.pathSeparator - "        + File.pathSeparator);
        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"));
    }
}
cs
실행결과
경로를 제외한 파일이름 - FileEx1.java
확장자를 제외한 파일이름 - FileEx1
확장자 - java
경로를 포함한 파일이름 - c:\jdk1.8\work\ch15\FileEx1.java
파일의 절대경로        - c:\jdk1.8\work\ch15\FileEx1.java
파일의 정규경로        - C:\jdk1.8\work\ch15\FileEx1.java
파일이 속해 있는 디렉토리 - c:\jdk1.8\work\ch15

File.pathSeparator - ;
File.pathSeparatorChar - ;
File.separator - \
File.separatorChar - \

user.dir=C:\HTMLCSSJSJSP\JavaJungSuk
sun.boot.class.path=null

주의! File 인스턴스를 생성했다고 해서

파일이나 디렉토리가 생성되는 것은 아니다!

존재하는 파일을 참조할 때는 위와 같이 하면 되지만
존재하지 않는 파일을 새로 생성해야 할 때는 File의 메서드를 사용하자

▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽▽

File의 메서드

메서드 설명
boolean canRead() 읽을 수 있는 파일인지 검사
boolean canWrite() 쓸 수 있는 파일인지 검사
boolean canExecute() 실행할 수 있는 파일인지 검사
int compareTo(File pathname) 주어진 파일 또는 디렉토리를 비교한다.
같으면 0을 반환,
다르면 1 또는 -1 반환.
(Unix시스템에서는 대소문자를 구별
Windows에서는 구별하지 않음)
boolean exists() 파일이 존재하는지 검사
boolean isAbsolute() 파일 또는 디렉토리가 절대경로명으로 지정되었는지 확인
boolean isDirectory() 디렉토리인지 확인
boolean isFile() 파일인지 확인
boolean isHidden() 파일의 속성이 '숨김(Hidden)'인지 확인
또한 파일이 존재하지 않으면 flase를 반환
boolean createNewFile() 아무런 내용이 없는 새로운 파일을 생성
(단, 생성하려는 파일이 이미 존재하면 생성x)

[사용예시]
File f = new File("c:\\jdk1.8\\work\\test3.java");
f.createNewFile();
static File createTempFile
(String prefix, String suffix)
임시파일을 시스템의 임시 디렉토리에 생성

[사용예시]
System.out.println(File.createTempFile("work", "tmp"));
결과 : c:\windows\TEMP\work14247.tmp
static File createTempFile
(String prefix, String suffix, File directory)
임시파일을 시스템의 지정된 디렉토리에 생성
boolean delete() 파일을 삭제
void deleteOnExit() 응용 프로그램 종료시 파일을 삭제
주로 실행 시 작업에 사용된 임시파일을 삭제하는 데 사용
boolean equals(Object obj) 주어진 객체(주로 File인스턴스)가 같은 파일인지 비교
(Unix시스템에서는 대소문자 구별
Windows에서는 구별하지 않음)
long lastModified() 파일의 마지막으로 수정된 시간을 지정된 시간을 반환
long length() 파일의 크기를 반환
String[] list() 디렉토리의 파일목록(디렉토리 포함)을 String배열로 반환
String[] list(FilenameFilter filter)
File[] list(FilenameFilter filter)
FilenameFilter인스턴스에 구현된
조건에 맞는 파일을 String배열(File배열)로 반환
File[] listFiles()
File[] listFiles(FileFilter filter)
File[] listFiles(FilenameFilter f)
디렉토리의 파일목록(디렉토리 포함)을
File배열로 반환(filter가 지정된 경우에는
filter의 조건과 일치하는 파일만 반환)
static File[] listRoots()
long getFreeSpace()
long getTotalSpace()
long getUsablSpace()
컴퓨터의 파일시스템의 root의 목록
(floppy, CD-ROM, HDD drive)을 반환
(예: A:\, C:\, D:\)
get으로 시작하는 메서드들은 File이 root일 때, 
비어있는 공간, 전체 공간, 사용가능한 공간을
바이트 단위로 반환
boolean mkdir()
boolean mkdirs()
파일에 지정된 경로로 디렉토리(폴더)를 생성,
성공하면 true.
mkdirs는 필요하면 부모 디렉토리까지 생성.
boolean renameTo(File dest) 지정된 파일(dest)로 이름을 변경
boolean setExecutable(boolean executable)

boolean setExecutable
(boolean executable, boolean ownerOnly)

boolean setReadable(boolean readable)

boolean setReadable
(boolena readable, boolean ownerOnly)

boolean setReadOnly()

boolean setWritable(boolean writable)

boolean setWritable
(boolean writable, boolean ownerOnly)
파일의 속성을 변경한다.
OwnerOnly가 true면,
파일의 소유자만 해당 속성을 변경할 수 있다.
boolean setLastModified(long t) 파일의 마지막으로 수정된 시간을 지정된 시간(t)으로 변경
Path toPath() 파일을 Path로 변환해서 반환
URI toURI() 파일을 URI로 변환해서 반환



728x90