我试图将应用中的一些数据保存在内部私有存储区域(应用用户首选项)的一个简单文本文件中。我已经阅读了这里的许多问题(StackOverflow)并尝试了建议的解决方案,但没有成功。最简单的解决方案似乎是这里建议的一个:
http://developer.android.com/guide/topics/data/data-storage.html#filesInternal
但我无法让它在我的测试设备上工作。我也尝试使用java.io.File中可用的方法和适当的方法创建文件。我也尝试在SDCard上创建文件,结果相同,失败。我尝试了其他答案中列出的许多解决方案,完全按照建议的代码和指令操作,并找到相同的结果。我开始觉得我遗漏了一些重要的代码,或者某个地方的设置标志,我在manifest文件中设置了权限:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
需要说明的是,我正在尝试写入设备的内部私有存储。它是一个包含姓名,电话号码和几个int
类型标志的小文件。无论我使用什么方法,我都会发现文件没有创建(或者如果我手动将文件放在SDCard上,则会更改),或者当我尝试引用文件或文件位置时会收到NullPointerException:
private File fILE = new File("Mydata", main.FILENAME);
或
private File fILE = getDir("Mydata", 0);
我运行的代码在HTC英雄,更新与最新的服务版本从Sprint.任何帮助将不胜感激,提前感谢!
- 史蒂夫
更新(2/2/11):使用EVO(API 8)我仍然得到一个NullPointerException。生成异常的代码如下,对于为什么我的应用无法访问内部存储有什么想法吗?我在三个不同的物理设备上使用两个API级别(API 7和8)遇到了这个问题。
File newfile = new File(this.getFilesDir() + "/data/files/", "sample.txt");
更新2:2/4/11 -我发现在任何情况下都看不到物理设备(数据目录)上的文件结构。有人对此有什么想法吗?设备配置正确,可以从eclipse或adb运行应用程序。
更新3:(2/9/11)-我想我可能已经找到了这里的问题所在,但我不确定如何处理它。我已经弄清楚了物理设备上/data/目录的权限是:drwxrwx--x
.我不知道为什么会这样,也许是Sprint的一些东西?我已经在HTC Hero上找到了这种设置,三星Epic(Galaxy S),和HTC EVO都在Sprint上.问题似乎是DDMS和我的应用程序没有r/w访问目录.我需要弄清楚2件事在这里,为什么会这样,以及如何在野外克服这个问题.再次,这里的任何帮助都会很棒!!
更新4:我认为去年二月是一个总的金发时刻对我来说(见更新3).测试设备,我有没有ROOTed,因此没有访问(DUH!).经过所有的更新,他SGS和EVO 4G已经经历了,结果仍然是一样的.我仍然在解决这个问题,并将尝试回到这里与更新很快(希望不到一年的时间下一次).
6条答案
按热度按时间d6kp6zgx1#
尝试更改以下行:
致:
uyto3xhc2#
不是直接回答你的问题,但无论如何:我注意到你不想在你的文件中存储大量的数据,那么使用共享首选项是否足够呢?
也许更有趣的是:即使写入共享首选项文件,问题是否仍然存在?
http://developer.android.com/guide/topics/data/data-storage.html#pref
z6psavjg3#
物理设备的
/data/
目录仅对root用户可用。由于在物理设备上获得此访问权限的唯一现实方法是root设备,因此DDMS文件资源管理器无法进入目录树的此分支。至于为什么应用程序不会写在那里,可能的问题是,事实上,我已经签署了调试密钥的应用程序(不是一个大 *NIXMaven,但似乎是从我个人的研究情况在这里)。
jdg4fx2g4#
我也在处理同样的问题。最后,我发现你真的不必为了在内部存储中创建一个新文件而给予所有文件路径。只要提到文件名,它就会在设备上的应用程序包文件夹下创建。我确实在这里提到过
而且它工作得很完美。我会说避免提到完整的文件路径,如:/data/...来创建一个文件(你需要写权限来以这种方式创建一个文件)。让Android框架来为你的应用创建一个私有文件。
js4nwp545#
内部存储区域是应用程序的私有区域,因此用户必须拥有root访问权限(root设备)才能创建和加载文件。如果您拥有root设备,则应按照以下方式将文件写入内部存储:
这应该会立即创建一个名为MyFile的文件,内容为hello world。内部存储目录通常位于我们应用程序包名称指定的特殊位置。在我的情况下,它是/data/data/[package name],创建的文件存储在该目录中名为files的目录中。
wqsoz72f6#
就像@bianca说的,你最好不要使用文件路径。相反,只使用文件名来创建文件。像这样:
要获取该文件,您可以用途:
阅读更多:Saving Files.