File Class
Java에서 File 클래스를 사용해 특정 경로의 파일 리스트를 가져올 수 있다.
Map<String, Integer> fileMap = Maps.newHashMap();
File dir = new File(baseUploadPath + "/" + place.getId());
if(!dir.exists())
dir.mkdirs();
String[] allFiles = dir.list();
for(String fileName : allFiles)
fileMap.put(fileName, 0);
File class 제공 함수
다음은 File 클래스가 기본적으로 제공해 주는 함수이다.
▶ Iist()
디렉토리에 있는 파일들의 이름 목록을 반환한다.
▶ Iist(FilenameFilter filter)
디렉토리에 있는 파일들의 이름을 필터링한 이름 목록을 반환한다.
▶ IistFiles()
디렉토리에 있는 파일 목록을 반환한다.
▶ IistFiles(FileFilter filter)
디렉토리에 있는 파일들을 필터링한 파일 목록을 반환한다.
▶ IistFiles(FilenameFilter filter)
디렉토리에 있는 파일들의 이름을 필터링한 파일 목록을 반환한다.
▶ isDirectory
특정 디렉토리만 걸러낸다.
1. 파일 이름 목록 반환 - list()
String DATA_DIRECTORY = "c:/mine_data/";
File dir = new File(DATA_DIRECTORY);
String[] filenames = dir.list();
for (String filename : filenames) {
System.out.println("filename : " + filename);
}
▷결과
filename : it
filename : mine.txt
filename : mine_it.zip
filename : record
list() 함수는 해당 경로의 파일 목록을 가져오는데 이름만 가져오는것이다.
그래서 String[] 로 return 되는 것이다.
2. 필터링된 파일 이름 목록 반환 - list(FilenameFilter filter)
String DATA_DIRECTORY = "c:/mine_data/";
File dir = new File(DATA_DIRECTORY);
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File f, String name) {
//파일 이름에 "mine"가 붙은것들만 필터링
return name.contains("mine");
}
};
String[] filenames = dir.list(filter);
for (String filename : filenames) {
System.out.println("filename : " + filename);
}
▷결과
filename : mine.txt
filename : mine_it.zip
FilenameFilter를 통해 필터링을 하는데 파일을 탐색할 때마다 accept(File f, String name)가 호출된다. 여기서 File f는 파일의 부모 디렉토리, 즉 위 예제 코드에서는 "c:/mine_data"를 의미한다.
그리고 name은 말 그대로 파일 이름을 의미하기 때문에 이 name을 가지고 조건을 걸어주어 필터링시켜주면 된다.
3. 파일 목록 반환 - listFiles()
String DATA_DIRECTORY = "c:/mine_data/";
File dir = new File(DATA_DIRECTORY);
File files[] = dir.listFiles();
for (File file : files) {
System.out.println("file : " + file);
}
▷결과
file : c:\mine_data\it
file : c:\mine_data\mine.txt
file : c:\mine_data\mine_it.zip
file : c:\mine_data\record
listFiles() 함수는 파일 목록을 가져오는 거라 해당 디렉토리의 하위 파일 목록을 가져오는 것이다.
해당 경로의 하위 파일들만 가져오기 때문에 하위 폴더 안에 있는 또 다른 파일 목록들을 가져오고 싶다면 추가적인 코딩이 필요하다.
4. 필터링된 파일 목록 반환(1) - listFiles(FileFilter filter)
String DATA_DIRECTORY = "c:/mine_data/";
File dir = new File(DATA_DIRECTORY);
FileFilter filter = new FileFilter() {
public boolean accept(File f) {
return f.getName().endsWith("zip");
}
};
File files[] = dir.listFiles(filter);
for (File file : files) {
System.out.println("file : " + file);
}
▷결과
file : c:\mine_data\mine_it.zip
FilenameFilter와 마찬가지로 파일마다 accept가 실행되는데 FilenameFilter에서의 File이 의미하는 건 부모 경로라고 한다면 FileFilter에서의 File은 해당 File을 그대로 의미하기 때문에 위 코드처럼 File이 가지는 속성을 가지고 필터링이 가능하다.
5. 필터링된 파일 목록 반환(2) - listFiles(FilenameFilter filter)
String DATA_DIRECTORY = "c:/mine_data/";
File dir = new File(DATA_DIRECTORY);
FilenameFilter filter= new FilenameFilter() {
public boolean accept(File f, String name) {
return name.contains("mine");
}
};
File files[] = dir.listFiles(filter);
for (File file : files) {
System.out.println("file : " + file);
}
▷결과
file : c:\mine_data\mine.txt
file : c:\mine_data\mine_it.zip
list()에서 사용한 FilenameFilter와 동일하게 작동한다.
출처: https://mine-it-record.tistory.com/432 [나만의 기록들:티스토리]
6. 특정 디렉토리 및 파일 여부 체크 - isDirectory()
디렉토리를 검색할 필요가 있을 경우에 다음 코드가 유용할 것 같다.
File file = new File(path);
File[] files = file.listFiles();
if (files == null)
return false;
for(int i = 0;i < files.length;i++) {
if(files[i].isDirectory()) {
Log.v("Directory : ", files[i].getName());
} else {
Log.v("File :", files[i].getName());
}
}
path를 이용하여 디렉토리를 열고, listFiles() 메서드를 이용해서 디렉토리의 서브 디렉토리와 파일 목록을 얻을 수 있다.
디렉토리, 파일 여부를 체크하는 것은 isDirectory() 메서드를 이용할 수 있다.
7. 파일 명 체크 - getName()
파일명은 getName()을 이용한다.
만약 특정 확장자로 된 파일만 걸러내고 싶으면, FileFilter 기능을 이용하여 디렉토리만 걸러내고 싶으면 다음과 같이 구현할 수 있다.
FileFilter fileFilter = new FileFilter() {
public boolean accept(File file) {
return file.isDirectory();
}
};
File file = new File(path);
File[] files = file.listFiles(fileFilter);
if (files == null)
return false;
for(int i = 0;i < files.length;i++) {
if(files[i].isDirectory()) {
Log.v("Directory : ", files[i].getName());
} else {
Log.v("File :", files[i].getName());
}
}
'Java' 카테고리의 다른 글
[Spring] Jackson ObjectMapper (0) | 2022.07.15 |
---|---|
[Java] List<E> subList(int fromIndex, int toIndex); (0) | 2022.07.15 |
[Java] File Class를 이용한 파일 생성 (0) | 2022.07.15 |
[Spring] StringUtils 클래스로 String 다루기 (0) | 2022.07.14 |
[Java] for문 List의 Null 체크 (0) | 2022.07.12 |