知乎专栏 |
目录
遍历目录
AssetManager assetManager = MainApplication.getContext().getApplicationContext().getAssets(); try { String[] filelists = assetManager.list(""); for (int i = 0; i < filelists.length; i++) { Log.d(TAG, filelists[i]); } } catch (IOException e) { throw new RuntimeException(e); }
复制 Assets 到指定目录
private synchronized boolean copyAssetsData() { AssetManager assetManager = MainApplication.getContext().getApplicationContext().getAssets(); try { List<String> files = List.of(assetManager.list("")); for (String file : files) { Log.d(TAG, "coping " + file); String target = workspace.concat("/").concat(file); InputStream in = null; OutputStream out = null; try { Log.i(TAG, "copying asset files from [" + file + "] to [" + target + "]"); in = assetManager.open(file); (new File(target)).createNewFile(); out = new FileOutputStream(target); byte[] data = new byte[1024]; int length = -1; while ((length = in.read(data)) != -1) { out.write(data, 0, length); } out.flush(); } catch (Exception e) { Log.e(TAG, "skip asset files from [" + file + "] to [" + target + "]", e); } finally { if (in != null) { try { in.close(); } catch (IOException e) { Log.e(TAG, "" + e); } } if (out != null) { try { out.close(); } catch (IOException e) { Log.e(TAG, "", e); } } } } } catch (IOException e) { e.printStackTrace(); return false; } Log.d(TAG, "Copy assets files"); return true; }
Log.d(TAG, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()); Log.d(TAG, getExternalFilesDir(Environment.DIRECTORY_PICTURES).toString()); /storage/emulated/0/Pictures /storage/emulated/0/Android/data/cn.netkiller.album.education/files/Pictures
公共存储目录不会因为APP卸载而删除
Environment.getExternalStorageDirectory(): /storage/emulated/0 Environment.getExternalStoragePublicDirectory(""): /storage/emulated/0 Environment.getExternalStoragePublicDirectory("test"): /storage/emulated/0/test Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES): /storage/emulated/0/Pictures
Environment.getDataDirectory(): /data Context.getCacheDir(): /data/data/cn.netkiller.test/cache Context.getFilesDir(): /data/data/cn.netkiller.test/files Context.getFileStreamPath(""): /data/data/cn.netkiller.test/files Context.getFileStreamPath("test"): /data/data/cn.netkiller.test/files/test
Environment.getExternalStorageDirectory(): /storage/emulated/0 Context.getExternalCacheDir(): /storage/emulated/0/Android/data/cn.netkiller.test/cache Context.getExternalFilesDir(""): /storage/emulated/0/Android/data/cn.netkiller.test/files Context.getExternalFilesDir(null): /storage/emulated/0/Android/data/cn.netkiller.test/files Context.getExternalFilesDir("test"): /storage/emulated/0/Android/data/cn.netkiller.test/files/test Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES): /storage/emulated/0/Android/data/cn.netkiller.test/files/Pictures
public static String DIRECTORY_MUSIC = "Music"; public static String DIRECTORY_ALARMS = "Alarms"; public static String DIRECTORY_NOTIFICATIONS = "Notifications"; public static String DIRECTORY_PICTURES = "Pictures"; public static String DIRECTORY_MOVIES = "Movies"; public static String DIRECTORY_DOWNLOADS = "Download"; public static String DIRECTORY_DCIM = "DCIM"; public static String DIRECTORY_DOCUMENTS = "Documents";