将文件复制到资产文件夹

9

搜索了一个小时,我没有找到解决我的问题的任何方法。

我想将一个文件从sd卡移动到assets文件夹并覆盖存在于assets文件夹中的现有文件(这两个文件都是SQLite数据库,名称相同,只是数据稍有不同)。

??


8
在运行时,您无法从/向资产文件夹中删除或添加任何内容。 - Mudassir
1
我想从服务器下载SQLite数据库,然后复制到资产文件夹中。 - Sunny
1
为什么要下载数据库,直接获取结果并使用即可。 - Mudassir
2
这就是我在上一条评论中所说的。从Web服务器检索最新的数据库信息并显示它。 - Mudassir
@johnsmith,嘿,你解决了这个问题吗?我也遇到了同样的问题。但是我不想将数据库存储在外部。 - Akshatha S R
显示剩余3条评论
3个回答

13

实际上,android .apk文件的行为是只读的,因此在该apk文件中的目录结构遵循相同规则,所以在运行时无法对文件进行写入或更改,这就是为什么您无法更改/asset文件夹的原因。您可以从中读取文件(即将可用于asset的文件复制到任何内部存储器/sdcard但不能反过来将其写入

这适用于所有在.apk文件中建立的目录。根据文档。


抱歉,同样的评论,但我需要解决方案 :) 我有一个数据库在资产文件夹中,也在服务器上,现在我想更改服务器上的数据库,以便用户可以获得最新的更新。我该怎么做?用户将如何获取该数据库? - 约翰·史密斯 7秒前 - Sunny
你需要将数据库写入内部存储或SD卡中(优先选择内部存储)。 - user370305
你能指导我怎样做吗? - Sunny
如果我在SD卡或内部存储中编写数据库,如何将该数据库复制到我的应用程序数据库中? - Sunny
1
好的,只需将您创建的数据库放入资产目录中,然后在应用程序第一次安装时将该数据库文件复制到内部存储器/data/data/packagename/databases/中,然后打开该数据库文件以供应用程序使用。现在,当您从Web服务器获取更新时,只需将数据更新到位于上述路径的内部存储器中的数据库文件即可。 - user370305
只要看一些数据库教程,你就能清楚地理解了。如果你需要更多的帮助,随时问我。 - user370305

4

Assets文件夹不可写,只能读取,因此您无法从sdcard复制到assets文件夹,但是您可以从assets文件夹复制到sdcard.


我知道https://dev59.com/7m855IYBdhLWcg3wQx5L,但我的问题不同。 - Sunny
+1 有关资产文件夹不可写的信息,我会记在心里的 :P - Sunny

1

如果你想让其他应用程序无法访问你的数据库,那么你可以这样做:

  1. 从网站下载数据库,在应用程序目录中创建一个临时数据库。
  2. getDatabasePath() 这将为你提供所创建虚拟数据库的路径,现在用下载的数据库替换它。

注意:用户和具有根访问权限的应用程序仍然能够访问它,而在这种情况下你无能为力。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接