지금까지 내 코드는 다음과 같습니다.
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());
}
}
}