android - 无法在外部存储 USB 中创建文件?
问题描述
我一直在做一个项目,我必须在连接到 android 设备的外部 USB 上存储一个文本文件。我在清单文件中授予了 READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE 权限。这是我所做的。
boolean Available= false;
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)){
// Both Read and write operations available
Available= true;
} else {
// SD card not mounted
Available = false;
}
if(Available) {
File f = new File(Environment.getExternalStorageDirectory() +
"/file");
if (!f.exists())
if (!f.mkdir()) {
Toast.makeText(this, myfolder + " can't be created.",
Toast.LENGTH_SHORT).show();
} else
Toast.makeText(this, myfolder + " can be created.",
Toast.LENGTH_SHORT).show();
}
在我尝试通过调用 Environment.getExternalStorageDirectory() 获取路径之后,我检查了要插入的设备。但是当我创建一个新文件时,它总是给我无法创建目录的答案。请任何人都可以帮助我。
解决方案
不确定您在评论中提到的堆栈跟踪错误,但如果您在设置中授予权限,您的代码应该可以工作。
可能最好的办法是检查权限,并且只有在可用的情况下才使用存储逻辑,例如:
boolean Available = false;
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this, "Grant the external storage permission first!",
Toast.LENGTH_SHORT).show();
} else {
// then do your rest of the storage checks and logic.
}
有关如何处理权限请求的更多详细信息,请参见此处。
另请注意,您可能需要使用您声明的文件夹,而不是:
File f = new File(Environment.getExternalStorageDirectory() +
"/file");
你应该使用:
File f = new File(myfolder, "file");
推荐阅读
- python - Tensorflow:有没有办法将元数据保存在 TFRecords 文件中
- mysql - MySQL 8.0:将多边形创建为围绕点的圆
- docker - 无法让 npm 安装的应用程序出现在最终的 Docker 映像中
- java - 带有scanner.nextInt()的线程“主” java.util.NoSuchElementException 中的异常
- python-3.x - 在python中处理两位和四位数字年份的日期
- node.js - 由于 Npm 安装崩溃,无法安装 Scrypt
- javascript - React - 动态添加输入而不改变状态
- swift - 如何在登录时管理访问控制
- ios - 与 UIKit/Swift 重叠的 UIView 和交互性问题
- python-3.x - 为什么当我使用 zip() 时我的 python 会冻结?