Android mkdir() 返回 false,不创建文件夹

用户3484582

这真让我抓狂。我已经尝试了各种语法,但两者mkdir()mkdirs()返回FALSE。

我的代码:

String extStorageDirectory = Environment.getExternalStorageDirectory().toString();

File folder = new File(extStorageDirectory, "myportal");
boolean bool = folder.mkdir();

File pdfFile = new File(folder, fileName);

try{
    pdfFile.createNewFile();
}catch (IOException e){
    e.printStackTrace();
}
FileDownloader.downloadFile(fileUrl, pdfFile);

我正在IOException: No such file or directory尝试创建文件时。logcat 部分显示没有创建目录:

Log.d("BG", "URL: " + fileUrl);
Log.d("BG", "pdfFile: " + pdfFile);
Log.d("BG", "Ext Storage: " + extStorageDirectory);
Log.d("BG", "Ext storage state: " + Environment.getExternalStorageState().toString());
Log.d("BG", "Mkdir return: " + bool);
Log.d("BG", "IsDirectory: " + folder.isDirectory());

以及打印的内容:

05-26 22:43:03.797 19364-30646/com.kristmiha.myportal2 D/BG: URL: http://192.168.100.65:80/myportal/upload/orari.pdf
05-26 22:43:03.798 19364-30646/com.kristmiha.myportal2 D/BG: pdfFile: /storage/emulated/0/myportal/orari.pdf
05-26 22:43:03.798 19364-30646/com.kristmiha.myportal2 D/BG: Ext Storage: /storage/emulated/0
05-26 22:43:03.804 19364-30646/com.kristmiha.myportal2 D/BG: Ext storage state: mounted
05-26 22:43:03.805 19364-30646/com.kristmiha.myportal2 D/BG: Mkdir return: false
05-26 22:43:03.805 19364-30646/com.kristmiha.myportal2 D/BG: IsDirectory: false

我已经仔细检查了权限,并将它们放在正确的位置。我想我在某处读到在KitKat之后我们不允许在外部存储中写入,但还没有找到解决方案。

迈克尔·亚伦·萨菲恩

创建外部存储目录需要WRITE_EXTERNAL_STORAGE权限;没有此权限,尝试写入外部存储将失败。此外,并非所有目录都必须可写;使用getExternalStoragePublicDirectory()获取具有共享写访问权限的目录(其他外部目录可能是只读的)。但是,如果写入外部存储的目的是与其他应用程序共享文件,则应强烈考虑使用FileProvider API,而不是(另请参阅设置文件共享); 使用此策略,您的应用程序将文件存储在其自己的内部特定于应用程序的目录中,然后通过内容提供程序将这些文件选择性地共享给其他应用程序。此策略为文件提供了更高的安全性,并使您可以对文件的读/写提供更好的访问控制。

既然您说您已经拥有所需的权限*,那么您最有可能出错的地方是对toString(). 不能保证toString()文件上方法返回其完整路径。在连接这些时使用getPath()getAbsolutePath()还建议在选择写入外部存储时,首先检查其状态在某些情况下,外部存储可以弹出/卸载并且不可用。

*您应该使用ContextCompat.checkSelfPermission()验证这一点如果权限不存在,您应该添加对requestPermissions()的调用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章