[JAVA] File 클래스 정리 (파일정보, 파일목록, 하드디스크 정보 출력)
File 클래스 정리
java.io 패키지는 기존의 파일이나 폴더에 대한 제어를 하는 데 사용하는 File 클래스를 제공한다. 이 클래스를 이용해서 파일과 폴더에 대한 다양한 기능을 제공한다.
파일을 나타내는 객체를 생성하려면 다음과 같은 File 클래스의 생성자 함수를 이용한다.
* File 클래스의 생성자
File 클래스의 생성자 | 설명 |
File(File parent, String Child) | parent 객체 폴더의 child 라는 파일에 대한 File 객체를 생성한다. |
File(String pathname) | pathname에 해당되는 파일의 File 객체를 생성한다. |
File(String parent, String, child) | parent 폴더 경로의 child라는 파일에 대한 File 객체를 생성한다. |
File(URI uri) | file uri 경로에 대한 파일의 File 객체를 생성한다. |
* File 클래스의 메소드
File 클래스의 메소드 | 설명 |
File getAbsoluteFile() | 파일의 절대 경로를 넘겨준다. |
String getAbsolutePath() | 파일의 절대 경로를 문자열로 넘겨준다. |
File getCanonicalFile() | 파일의 Canonical 경로를 넘겨준다. |
String getCanonicalPath() | 파일의 Canonical 경로를 문자열로 넘겨준다. |
String getName() | 파일이나 폴더의 이름을 넘겨준다. |
String getParent() | 부모 경로에 대한 경로명을 문자열로 넘겨준다. |
File getParentFile() | 부모 폴더를 File의 형태로 리턴한다. |
String getPath() | 파일의 경로를 문자열의 형태로 리턴한다. |
long getTotalSpace() | 하드디스크의 총 용량을 리턴한다. |
long getUsableSpace() | 하드디스크의 사용 가능한 용량을 리턴한다. |
long getFreeSpace() | 하드디스크의 남은 공간을 리턴한다. |
int hashCode() | hash code를 반환한다. |
long lastModified() | 해당 경로 파일의 최종 수정 일자를 반환한다. |
long length() | 해당 경로 파일의 길이를 반환한다. |
Path toPath() | java.nio.file.Path 객체로 반환한다. |
URI toURI() | URI 형태로 파일 경로를 반환한다. |
File[] listRoots() | 하드디스크의 루트 경로를 반환한다. |
String[] list() | 경로의 파일들과 폴더를 문자열 배열로 반환한다. |
String[] list(FilenameFilter filter) | filter에 만족되는 파일들과 폴더 이름을 문자열 배열로 반환한다. |
File[] listFiles() | 해당 경로의 파일들과 폴더의 파일을 배열로 반환한다. |
File[] listFiles(FileFilter filter) | filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. |
File[] listFiles(FilenameFilter filter) | filter에 만족되는 파일들과 폴더를 File 배열로 반환한다. |
* File 생성/수정/삭제 메소드
File 생성 수정 삭제 메소드 | 설명 |
boolean createNewFile() | 주어진 이름의 파일이 없으면 새로 생성한다. |
static File createTempFile(String prefix, String suffix) | default temporary-file 디렉토리에 파일 이름에 prefix와 suffix를 붙여 임시파일을 생성한다. |
static File createTempFile(String prefix, String suffix, File directory) | 새로운 임시파일을 파일 이름에 prefix와 suffix를 붙여 directory 폴더에 생성한다. |
boolean delete() | 파일이나 폴더를 삭제한다. 단, 폴더가 비어있지 않으면 삭제할 수 없다. |
void deleteOnExit() | 자바가상머신이 끝날 때 파일을 삭제한다. |
boolean mkdir() | 해당 경로에 폴더를 만든다. |
boolean mkdirs() | 존재하지 않는 부모 폴더까지 포함하여 해당 경로에 폴더를 만든다. |
boolean renameTo(File dest) | dest 로 File 이름을 변경한다. |
* File 체크 메소드
File 체크 메소드 | 설명 |
boolean exists() | 파일의 존재 여부를 리턴한다. |
boolean isAbsolute() | 해당 경로가 절대경로인지 여부를 리턴한다. |
boolean isDirectory() | 해당 경로가 폴더인지 여부를 리턴한다. |
boolean isFile() | 해당 경로가 일반 file 인지 여부를 리턴한다. |
boolean isHidden() | 해당 경로가 숨김 file 인지 여부를 리턴한다. |
* File 권한 메소드
File 클래스 권한 관련 메소드 | 설명 |
boolean canExecute() | 파일을 실행할 수 있는지 여부를 리턴한다. |
boolean canRead() | 파일을 읽을 수 있는지 여부를 리턴한다. |
boolean canWrite() | 파일을 쓸 수 있는지 여부를 리턴한다. |
boolean setExecutable(boolean executable) | 파일 소유자의 실행 권한을 설정한다. |
boolean setExecutable(boolean executable, boolean ownerOnly) | 파일의 실행 권한을 소유자 또는 모두에 대해 설정한다. |
boolean setReadable(boolean readable) | 파일의 소유자의 읽기 권한을 설정한다. |
boolean setReadable(boolean readable, boolean ownerOnly) | 파일의 읽기 권한을 소유자 또는 모두에 대해 설정한다. |
boolean setReadOnly() | 파일을 읽기 전용으로 변경한다. |
boolean setWritable(boolean writable) | 파일의 소유자의 쓰기 권한을 설정한다. |
boolean setWritable(boolean writable boolean ownerOnly) | 파일의 쓰기 권한을 소유자 또는 모두에 대해 설정한다. |
* 파일 정보 가져오기 예제
import java.io.File; import java.io.IOException; public class FileTest { public static void main(String[] args) { // FileTest project 폴더에서 filefolder est.txt 파일을 객체로 생성한다. // 는 이스케이프 문자로 인식되므로 \\ -> \ 로 사용한다. File file = new File("filefolder\\test.txt"); // 경로에 파일이 존재하면 if(file.exists()){ try{ System.out.println("getName: " + file.getName()); // 파일 이름 출력 System.out.println("getPath: " + file.getPath()); // 파일 경로 출력 // 파일 절대 경로 출력 System.out.println("getParent : " + file.getParent()); // 파일의 쓰기/읽기 권한 체크 if(file.canWrite()) System.out.println(file.getName() + "은 쓸 수 있습니다."); if(file.canRead()) System.out.println(file.getName()+ "은 읽을 수 있습니다."); // 객체의 파일, 폴더 여부 체크 if(file.isFile()){ System.out.println(file.getName() + "은 파일입니다."); }else if(file.isDirectory()){ System.out.println(file.getName() + "은 폴더입니다."); }else{ System.out.println(file.getName() + "은 파일도 폴더도 아닙니다."); } // 파일 내용 길이 출력 System.out.println(file.getName() + "의 길이는 "+ file.length() + " 입니다."); }catch(IOException e){ System.err.println(e); } }else{ System.out.println("파일을 찾을 수 없습니다. "); } } } |
- 각 메소드의 기능을 보고 결과를 확인하자.
- test.txt 파일은 FileTest 프로젝트 폴더 아래에 filefolder 폴더를 생성하여 그 안에 넣어두었다.
- new File("."); 경로는 해당 프로젝트의 폴더 경로로 상대경로로 지정된다.
- 위의 예제에서 test.txt 의 실제 경로는 프로젝트폴더 아래에 filefolder\test.txt 이지만, \ 는 이스케이프 문자로 인식되므로, \\ 로 해줘야 실제 \ 로 인식된다.
- new File("C:\\ ... "); 같이 절대 경로도 표현 가능하다.
* 특정 폴더의 파일 목록 출력하기 예제
import java.io.File; public class FileTest2 { public static void main(String[] args) { // 프로젝트 현재 폴더를 객체로 생성한다. File file = new File("."); // file이 존재하고 폴더일 경우 if(file.exists() && file.isDirectory()){ // 폴더의 파일/폴더 목록을 문자열 배열로 반환 String[] fList = file.list(); // 출력 for(int i=0; i<fList.length; i++) System.out.println(fList[i]); }else{ System.out.println("해당 경로는 폴더가 아닙니다."); } } } |
- new File(".") 는 현재 프로젝트 폴더를 나타낸다.
- file.list() 로 해당 폴더의 파일들을 문자열 배열로 반환한다. (자식 폴더 안의 파일은 가져오지 않는다.)
* 하드 디스크 정보 출력하기 예제
import java.io.File; public class FileTest3 { public static void main(String arg[]){ String drive; double totalSpace, usedSpace, freeSpace, usableSpace; // 하드디스크의 루트 드라이버들을 배열로 반환한다. File[] roots = File.listRoots(); for(File root : roots){ // 루트 드라이버의 절대 경로 drive = root.getAbsolutePath(); // 하드디스크 전체 용량 totalSpace = root.getTotalSpace() / Math.pow(1024, 3); // 사용가능한 디스크 용량 usableSpace = root.getUsableSpace() / Math.pow(1024,3); // 여유 디스크 용량 freeSpace = root.getFreeSpace() / Math.pow(1024,3); // 사용한 디스크 용량 usedSpace = totalSpace - usableSpace; System.out.println("하드 디스크 드라이버 : " + drive); System.out.println("총 디스크 용량 : " + totalSpace + "GB"); System.out.println("사용 가능한 디스크 용량 : " + usableSpace + "GB"); System.out.println("여유 디스크 용량 : " + freeSpace + "GB"); System.out.println("사용한 디스크 용량 : " + usedSpace+"GB"); System.out.println(); } } } |
- File[] roots = File.listRoots(); 는 하드디스크의 루트 드라이버를 배열로 반환한다.
- getUsableSpace()와 getFreeSpace() 는 결과가 같다.
- 사용한 디스크 용량은 총 용량에서 사용가능한 용량을 뺀 값이다.
- Math.pow(1024,3) 은 1024를 3승한 값이다.
출처: https://hyeonstorage.tistory.com/233?category=578560 [개발이 하고 싶어요]
'JAVA > Java IO' 카테고리의 다른 글
[JAVA] 문자 Stream : InputStreamReader / OutputStreamWriter (0) | 2019.08.07 |
---|---|
[JAVA] 문자 Stream : Reader / Writer (0) | 2019.08.07 |
[JAVA] ByteStream : DataInputStream / DataOutputStream (0) | 2019.08.07 |
[JAVA] ByteStream : BufferedInputStream / BufferedOutputStream (파일 복사 예제) (0) | 2019.08.07 |
[JAVA] ByteStream : FilterInputStream / FilterOutputStream (0) | 2019.08.07 |
[JAVA] ByteStream : FileInputStream / FileOutputStream (0) | 2019.08.06 |
[JAVA] System 클래스(표준 입출력) : System.in, System.out, System.err (0) | 2019.08.06 |
[JAVA] ByteStream : InputStream / OutputStream (0) | 2019.08.06 |