java - Android程序写入模拟器而不是手机

标签 java android

我正在尝试编写一个 Android 程序来接受输入,然后将数据写入手机内部存储器上的一个文件。当我在模拟器上执行我的程序时,它会像我期望的那样生成一个文件,但是当我尝试在我的手机上执行它时,文件似乎没有被创建。我在这个网站上环顾四周,似乎无法在任何地方找到解决我的问题的方法(一些类似的,但没有对我有用)我希望你们能够就我的问题向我提供建议做错了。

FileOutputStream fos = null;
String x = "Sample String";
    try{
            fos = openFileOutput("answers.txt", MODE_PRIVATE);
            fos.write(x.getBytes());

        } catch (IOException e) {
            e.printStackTrace();
        }    

    try {
           fos.close();
         } catch (IOException e) {
            e.printStackTrace();
    }

在模拟器上,我可以在“data/data/com.example.helloandroid/files/answers.txt”中找到 DDMS 中的文件。在电话上,如果我尝试在 DDMS 中打开数据文件夹,它会显示它是一个空目录。我已经将这一行添加到我的 list 中:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我似乎想不出还有什么我可能做错的。在此先感谢您的帮助,不胜感激。

最佳答案

您的代码很好,但正如其他人所说,Eclipse 中的 DDMS 无法正确访问内部存储,而内部存储是/data/data 所在的位置。您可以在 http://developer.android.com/guide/topics/data/data-storage.html 找到对不同类型 Android 存储的引用。

获得访问权限的一种方法是对您的设备进行 root。

另一种方法是安装 userdebug 版本。

然而,最简单的方法是通过 adb 的未记录的 run-as 选项.这允许您访问您的应用拥有的文件,即使它们在内部存储中也是如此。

要验证是否正在创建您感兴趣的文件,请在命令行中输入:

adb shell run-as com.example.helloandroid ls -l /data/data/com.example.helloandroid/files/

要获取特定文件的内容,也可以在命令行中输入:

adb shell run-as com.example.helloandroid cat /data/data/com.example.helloandroid/files/answers.txt

关于java - Android程序写入模拟器而不是手机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13150659/

相关文章:

android - 在 XML 中为 EditText 指定虚拟键盘类型

android - Fabric Debug Craslytic Reports : Signup, build Id 丢失,应用插件 : io. fabric

android - 机器人刷卡

Java 正则表达式死于堆栈溢出 : need a better version

java - 文件的直接行计数(ByteStream) - JAVA

java - 如何从倒数计时器中减去几秒钟?

java - 在 Graph 上打印 SQLite 数据库数据

android - 清除 EditText 上光标位置之前的整个文本

android - 如何正确使用 CALLER_IS_SYNCADAPTER

java - NoSuchMethodException : springframework. boot.autoconfigure.http.HttpMessageConverters