[英]How to store files to a Specified External Directory in Android
我試圖將一些文件從我的資產文件夾(並創建一些新文件)復制到外部文件夾。
我知道我需要以下權限 -
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
然后,我應該檢查外部存儲狀態如下(從 android 的官方示例中使用的代碼示例)-
/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
return true;
}
return false;
}
/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state) ||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
return true;
}
return false;
}
然后,我可以使用getExternalFilesDir()
作為 -
String finalOutputFilePath = context.getExternalFilesDir(null) + "/" + databaseName;
它會將文件保存到某個地方 - Android/data/myPackageName/files/
但是,我希望將文件存儲在特定文件夾中,例如 -
所以,我的問題是如何選擇(創建和使用)指定的文件夾?
PS - 我想,這個問題可能已經在 SO 上得到了回答,但我找不到它。
要創建文件夾,請使用 createFolder 方法。
private void createFolder(String folderName){
File file=new File(Environment.getExternalStorageDirectory() + File.separator +folderName);
if(!file.exists())
file.mkdirs();
}
private void CopyAssets(String folderName) {
AssetManager assetManager = getAssets();
String[] files = null;
try {
files = assetManager.list("Files");
} catch (IOException e) {
Log.e("tag", e.getMessage());
}
for(String filename : files) {
System.out.println("File name => "+filename);
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open("Files/"+filename); // if files resides inside the "Files" directory itself
out = new FileOutputStream(Environment.getExternalStorageDirectory().toString()+File.separator +folderName +"/" + filename);
copyFile(in, out);
in.close();
in = null;
out.flush();
out.close();
out = null;
} catch(Exception e) {
Log.e("tag", e.getMessage());
}
}
}
private void copyFile(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[1024];
int read;
while((read = in.read(buffer)) != -1){
out.write(buffer, 0, read);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.