热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Android中保存文件-对于初学者(内部/外部存储)

如何解决《在Android中保存文件-对于初学者(内部/外部存储)》经验,为你挑选了1个好方法。

我对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)


推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
author-avatar
php学者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有