作者:php学者 | 来源:互联网 | 2022-12-09 13:13
我对android开发非常陌生,请需要新手帮助...
我正在创建一个应具有2个目录,一个Databases目录和一个Images目录的应用程序,就像Whatsapp拥有的一样。
当我浏览手机时,我想在文件管理器中看到这些目录,就像看到其他应用程序文件夹一样。我尝试了在这里找到的所有内容,并通过代码在内部存储和外部存储中创建了它。该文件夹似乎已创建,但是当我浏览手机的文件管理器时,找不到带有应用程序名称的文件夹,而在其中没有我的数据库和图像文件夹...我在做什么错?我需要在android studio中创建这些文件夹作为添加文件夹吗?还是我需要通过代码创建它?
您能给我完成这项任务所需要做的动作吗?我正在使用android studio 3.1.3。感谢您的帮手!:)
1> Barak..:
术语“ 内部存储 ”和“ 外部存储 ”一开始可能会造成混淆,因为Google的意图与我们日常使用该语言所期望的不同:“外部”不一定表示“ SD卡”。这个家伙写了一篇关于术语混乱的文章
根据您的意图,您希望使用外部存储概念。差异在文档中得到了很好的解释,但是我将在这里向您简要介绍。
最后,我将为您提供一个示例,但首先让您了解基本知识:
内部存储器
文件只能由您的应用访问
卸载应用程序后,文件将被删除
文件始终可用(这意味着它们将永远不会保存在可移动内存中)
外置储存
文件可以被其他应用程序完全读取(在您的情况下,包括文件管理器应用程序的任何变体)
卸载您的应用程序后不一定会删除文件-稍后说明
无法保证文件的可用性(可以被其他应用/可移动内存删除)
因此,既然我们知道您需要外部存储,那么在开始之前需要完成几件事:
Manifest.xml
根据您的需要,在文件内部需要权限(读/写):
...
每个许可都有其自己的权限,这意味着,例如,如果您仅希望读取文件而不是编写文件,则无需同时拥有这两个权限
验证存储是否可用 -这是在运行时完成的,并在文档中进行了详细说明。我们需要确保将存储器安装到设备中/以某种方式不会导致问题的方式导致读取/写入请求失败。
时间示例!
在给定的方法中,我们将文本文件保存在根目录中。
归功于本文
public void writeFileExternalStorage() {
//Text of the Document
String textToWrite = "bla bla bla";
//Checking the availability state of the External Storage.
String state = Environment.getExternalStorageState();
if (!Environment.MEDIA_MOUNTED.equals(state)) {
//If it isn't mounted - we can't write into it.
return;
}
//Create a new file that points to the root directory, with the given name:
File file = new File(getExternalFilesDir(null), filenameExternal);
//This point and below is responsible for the write operation
FileOutputStream outputStream = null;
try {
file.createNewFile();
//second argument of FileOutputStream constructor indicates whether
//to append or create new file if one exists
outputStream = new FileOutputStream(file, true);
outputStream.write(cashback.getBytes());
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
我想专门回答您的一些问题:
我需要在android studio中创建这些文件夹作为添加文件夹吗?还是我需要通过代码创建它?
绝对不是通过Android Studio。这些是您的项目文件夹,其中包含您的代码。上面提到了这样做的方法。
我找不到带有我的应用程序名称的文件夹,而在其中没有我的Databases和Images文件夹...我在做什么错?
如前所述,可能将文件保存为内部存储文件/将其保存为项目文件夹-这些文件不会(也不应该)显示。
有用的事情要知道
目录有2种类型:公共目录和私有目录。
私人的
媒体商店无法访问
卸载应用后,文件将被删除
检索getExternalFilesDir(...)
方法
例如:在WhatsApp
目录(在我的手机)坐落在根级别。调用它将是:getExternalFilesDir("WhatsApp/...")
公开(下载/电影/图像库)
文件由MediaStore扫描
检索Environment.getExternalStoragePublicDirectory(...)
方法
示例:获取Documents
文件夹如下所示:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)