티스토리 뷰

호출 

 

List<FileObject> files = extensionFilter(Environment.getExternalStorageDirectory());

extenstionFilter 함수 내용

private ArrayList<FileObject> extensionFilter(File folder) {
ArrayList<FileObject> result = new ArrayList<>();
String value;
String fileFullPath;
FileObject fileObject;

File[] files = folder.listFiles();

if (files != null) {
for (File file : files) {
//폴더안에 폴더가 존재하면 아래 폴더로 재 호출,
if (file.isDirectory()) {
result.addAll(extensionFilter(file));
}
else {
// . 이 존재하는 파일만 가져온다.
if (file.toString().contains(".")) {
fileFullPath = file.toString();
value = file.toString().substring(file.toString().indexOf("/")+1);

// 파일 명을 가져온다.
for (int i=0; i<1; i++) {
if (value.contains("/")) {
value = value.substring(value.indexOf("/")+1);
i--;
}
}
fileObject = new FileObject(value, fileFullPath);
result.add(fileObject);
}
}
}
}

return result;
}

폴더 안에 폴더가 존재할 경우 존재하는 폴더로 재귀하여 다시 로직 진행. 

폴더 안에 폴더가 없을 경우 모든 파일을 다 갖고 올 수 있는데.. "."이 없는 파일은 무슨 파일인지도 모르겠고.. 

원하는 파일의 확장자가 있을 경우 "."이 아닌 다른걸 넣어도 됨

"/"가 존재할 경우 다시 반복하여 value 함수에서 "/" 앞을 잘라버린다.  이런식으로 풀경로와 파일이름을 나누어 저장. 

 

fileObject는 그냥 getset밖에 없다..

public class FileObject {
String FileName;
String FileFullPath;

public FileObject(String name, String path) {
FileName = name;
FileFullPath = path;
}

public String getFileName() {
return FileName;
}

public void setFileName(String fileName) {
FileName = fileName;
}

public String getFileFullPath() {
return FileFullPath;
}

public void setFileFullPath(String fileFullPath) {
FileFullPath = fileFullPath;
}
}

 

 

 

반복문에서 file.length를 호출하면 파일의 용량을 가져온다. 해당 용량을 아래 함수로 바꾸면 우리가 보기 쉬운 kb mb 같은 값으로 바꿔준다. 

private String formatFileSize(long bytes) { return android.text.format.Formatter.formatFileSize(context, bytes); }