[android] Android 디렉토리에 파일을 나열하는 방법은 무엇입니까?

지금까지 내 코드는 다음과 같습니다.

String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";

        AssetManager mgr = getAssets();

        try {

            String list[] = mgr.list(path);
            Log.e("FILES", String.valueOf(list.length));

            if (list != null)
                for (int i=0; i<list.length; ++i)
                    {
                        Log.e("FILE:", path +"/"+ list[i]);
                    }

        } catch (IOException e) {
            Log.v("List error:", "can't list" + path);
        }

그러나 그 디렉토리에 파일이 있지만 list.length = 0을 반환합니다. 어떤 아이디어가 있습니까?



답변

파일에 액세스하려면 매니페스트 파일에 권한을 부여해야합니다.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

이 시도:

String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";
Log.d("Files", "Path: " + path);
File directory = new File(path);
File[] files = directory.listFiles();
Log.d("Files", "Size: "+ files.length);
for (int i = 0; i < files.length; i++)
{
    Log.d("Files", "FileName:" + files[i].getName());
}


답변

나는 방금 발견했다 :

new File("/sdcard/").listFiles()
다음이 없으면 null을 반환합니다.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

AndroidManifest.xml 파일에서 설정합니다.


답변

음, APK 파일 안에 AssetManager있는 assets폴더 내의 파일을 나열 합니다. 따라서 위의 예에서 나열하려는 것은 [apk] / assets / sdcard / Pictures입니다.

assets응용 프로그램 내부의 폴더에 그림을 넣고 Pictures디렉토리에 있으면 mgr.list("/Pictures/").

반면에 APK 파일 외부에있는 sdcard의 파일이 Pictures폴더에있는 경우 다음 File과 같이 사용 합니다.

File file = new File(Environment.getExternalStorageDirectory(), "Pictures");
File[] pictures = file.listFiles();
...
for (...)
{
log.e("FILE:", pictures[i].getAbsolutePath());
}

문서의 관련 링크 :
File
Asset Manager


답변

위의 모든 답변 외에도 :

Android 6.0 이상 (API 레벨 23 이상)을 사용하는 경우 외부 저장소에 대한 액세스 권한을 명시 적으로 요청해야합니다. 단순히 갖는

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

매니페스트에서 충분하지 않습니다. 또한 활동에 대한 권한을 적극적으로 요청했습니다.

//check for permission
if(ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED){
    //ask for permission
    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE_PERMISSION_CODE);
}

나는 이것을 읽는 것이 좋습니다 :
http://developer.android.com/training/permissions/requesting.html#perm-request


답변

귀하는 path자산 폴더 내에 있지 않습니다. 를 사용하여 자산 폴더 내의 파일을 열거 AssetManager.list()하거나 다음을 통해 SD 카드의 파일을 열거합니다.File.list()


답변

String[] listOfFiles = getActivity().getFilesDir().list();

또는

String[] listOfFiles = Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS).list();


답변

이 시도:

public class GetAllFilesInDirectory {

public static void main(String[] args) throws IOException {

    File dir = new File("dir");

    System.out.println("Getting all files in " + dir.getCanonicalPath() + " including those in subdirectories");
    List<File> files = (List<File>) FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    for (File file : files) {
        System.out.println("file: " + file.getCanonicalPath());
    }

}

}