Development Tip

Android SDK에서 파일 크기를 얻습니까?

yourdevel 2020. 11. 1. 18:46
반응형

Android SDK에서 파일 크기를 얻습니까?


파일 크기를 가져 오는 데 문제가 있습니다. 다음 코드가 있습니다.

File file = new File("/sdcard/lala.txt");
long length = file.length();

그리고 항상 길이는 0입니다.

Android SDK (어떤 버전인지 확실하지 않음)를 사용하고 있으며 코드가 활동 내에서 실행 중이며 sdcard를 만들었습니다.

권한 문제일까요? 내가 놓친 것이 있습니까?


File.length()메서드는 javadoc에 따라 다음을 반환합니다 .

"이 추상 경로 이름으로 표시된 파일의 길이 (바이트) 또는 파일이없는 경우 0L. 일부 운영 체제는 장치 또는 파이프와 같은 시스템 종속 엔티티를 나타내는 경로 이름에 대해 0L을 반환 할 수 있습니다."

보시다시피 0이 반환 될 수 있습니다.

  • 파일이 존재하지만 0 바이트를 포함하는 경우.
  • 파일이 존재하지 않는 경우 또는
  • 파일이 일부 OS 특정 특수 파일 인 경우.

내 돈은 두 번째 경우에 있습니다. 즉, 잘못된 파일 이름 / 경로 이름이 있습니다. File.exists()파일 이름을 호출 하여 그 내용을 확인하십시오. 다른 두 가지 경우도 가능합니다.

(기록을 위해, /proc/...Linux 기반 시스템의 대부분의 파일은 명백한 파일 크기가 0입니다. Android는 Linux 기반입니다.)


Kb 또는 Mb폴더 / 파일 크기를 얻으려면 다음 코드를 사용하십시오. 파일의 정확한 크기를 찾는 데 도움이됩니다.

public static String getFolderSizeLabel(File file) {
    long size = getFolderSize(file) / 1024; // Get size and convert bytes into Kb.
    if (size >= 1024) {
        return (size / 1024) + " Mb";
    } else {
        return size + " Kb";
    }
}

이 함수는 바이트 형식으로 크기를 반환합니다.

public static long getFolderSize(File file) {
    long size = 0;
    if (file.isDirectory()) {
        for (File child : file.listFiles()) {    
            size += getFolderSize(child);
        }
    } else {
        size = file.length();
    }
    return size;
}   

다음을 사용해야합니다.

File file = new File(Uri.parse("/sdcard/lala.txt").getPath());

대신에:

File file = new File("/sdcard/lala.txt");

경로 ( "/sdcard/lala.txt")를 하드 코딩하는 대신 다음 코드를 사용하는 것이 좋습니다.

File file = new File(Environment.getExternalStorageDirectory().getPath() + "/lala.txt");
file.length()

참고 URL : https://stackoverflow.com/questions/7131930/get-the-file-size-in-android-sdk

반응형