gpt4 book ai didi

java - 如何读写SD卡?

转载 作者:行者123 更新时间:2023-12-02 04:39:14 25 4
gpt4 key购买 nike

我有一个可以从外部 SD 卡打开和编辑二进制文件的应用程序。我希望能够将该文件从打开的位置保存回来。

我已在 list 文件中添加了权限,并且还请求用户许可。感谢这些权限,我可以打开文件并获取数据,但是当我想将文件保存到外部 SD 卡时出现错误:java.io.FileNotFoundException: /storage/3834-3433/file.bin: open failed: EACCES (Permission denied) .

以下是授予权限的代码:

public boolean isStoragePermissionGranted() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
return true;
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
return false;
}
}
else {
return true;
}
}

以下是选择和获取文件路径的代码:

button.setOnClickListener(v -> {
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
startActivityForResult(intent, 200);
});

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

switch (requestCode) {
case 200:
if (resultCode == RESULT_OK) {
String filePath = Objects.requireNonNull(data.getData()).getPath();
filePathMain = filePath;
}
break;
}
}

这是保存文件的代码部分:

void byteArrayToFile() {
try (OutputStream out = new FileOutputStream(filePathMain)) {
out.write(outBytes);
} catch (IOException e) {
e.printStackTrace();
}
}

我不知道为什么它允许我打开文件但不能写入,当我有 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 时。我还必须在真实设备上运行此应用程序,因为当我在模拟器上运行此应用程序时,会出现错误,无法找到我选择的文件。我真的需要一些帮助。谢谢。

最佳答案

根据@CommonsWare评论,我从ACTION_GET_CONTENT更改为ACTION_OPEN_DOCUMENT以获取文件Uri。还使用 ContentResolver 来读取:

InputStream inputStream = getContentResolver().openInputStream(uri);

并写入文件:

ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(uri, "w");
FileOutputStream fileOutputStream = new FileOutputStream(pfd.getFileDescriptor());

现在它可以正常工作了。

关于java - 如何读写SD卡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56528034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com