![](/img/trans.png)
[英]How can I browse internal and external storage (sdcard) of android by clicking on photo?
[英]How can i create file at external storage(sdcard) in Android 10?
我嘗試制作“文件控制”應用程序。
我找到了如何讀取文件,但我找不到如何寫入文件。
我這樣設置權限。
AndroidManifast.xml
<application
...
android:requestLegacyExternalStorage="true"
...
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
我在 MainActivity.onCreate 中調用此代碼。
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, MODE_PRIVATE);
verifyStoragePermissions(this);
我想要讀取和寫入文件,位於/storage/3066-3133/title.txt
。 /storage/3066-3133
是我的 SD 卡路徑。
讀取文件工作正常。
public void readFile() {
String fileTitle = "title.txt";
File file = new File("/storage/3066-3133", fileTitle);
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String result = "";
String line;
while ((line = reader.readLine()) != null) {
result += line;
}
popupToast("read : " + result);
reader.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
popupToast("no file found");
} catch (IOException e2) {
e2.printStackTrace();
popupToast("read fail");
}
}
但是寫代碼出現異常。 write Exception: /storage/3066-3133/title.txt: open failed: EACCES (Permission denied)
public void writeFile() {
String fileTitle = "title.txt";
File file = new File("/storage/3066-3133", fileTitle);
try {
if (!file.exists()) {
file.createNewFile(); // error!!!!
}
FileWriter writer = new FileWriter(file, false);
String str = " write text ";
writer.write(str);
writer.close();
} catch (IOException e) {
e.printStackTrace();
popupToast("write fail");
}
}
另外,我可以在/storage/emulated/0/title.txt
寫入文件。 /storage/emulated/0
是內置的外部存儲路徑。
我需要更多的 sdcard 權限?
或者這是問題? 首先,我為目標 sdk:31 創建項目。 我在 build.gradle 中更改了 29。 更改目標 sdk 不起作用? 有人告訴 sdk 30 變化不大。 但是,如果這是問題,我不明白為什么“閱讀”工作......
利用
在清單中使用許可 android:name="android.permission.MANAGE_EXTERNAL_STORAGE" 以及
android:requestLegacyExternalStorage="true" 在您的
<
應用程序/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.