【问题标题】:Internal Storage on HTC DesireHTC Desire 的内部存储
【发布时间】:2011-05-25 19:37:13
【问题描述】:

我正在尝试将文件保存到内部存储器(不是 SD 卡)。正如文档指出的那样,如果我使用getExternalStorageDirectory(),数据将放在/Android/data/<package_name>/ 下,但那里什么都没有。此代码取自here。不过,Archos 上也有类似的代码。

File path = Environment.getExternalStorageDirectory();
File file = new File(path, "DemoPicture.jpg");
txtList.append(file.getPath());

try {
    path.mkdirs();
    InputStream is = getResources().openRawResource(R.drawable.icon);
    OutputStream os = new FileOutputStream(file);
    byte[] data = new byte[is.available()];
    is.read(data);
    os.write(data);
    is.close();
    os.close();
} catch (IOException e) {
    Log.d("ExternalStorage", "Error writing " + file, e);
}

我使用 Android SDK 2.1。权限 WRITE_EXTERNAL_STORAGE 已添加到清单中。 logcat 中没有错误。有什么提示吗?

【问题讨论】:

    标签: file data-storage android


    【解决方案1】:

    您混淆了内部和外部存储。您说的是内部存储,而实际上您使用的是外部存储:

    File path = Environment.getExternalStorageDirectory();
    

    生成的文件将位于此处:/mnt/sdcard/DemoPicture.jpg。但如果你真的想使用内部存储,请查看Context.openFileOutput 函数。


    编辑:

    文件路径 = Environment.getExternalStorageDirectory(); 文件文件 = 新文件(路径,“DemoPicture.jpg”); txtList.append(file.getPath());

    try {
        path.mkdirs();
        InputStream is = getResources().openRawResource(R.drawable.icon);
        OutputStream os = new FileOutputStream(file);
        byte[] data = new byte[is.available()];
        is.read(data);
        os.write(data);
        is.close();
        os.close();
    } catch (IOException e) {
        Toast.makeText(this, "Failed to write a file", Toast.LENGTH_LONG).show();
    }
    

    【讨论】:

    • 啊,对不起。我的意思是,外部存储。是的,路径显示为/mnt/sdcard/DemoPicture.jpg,但我在那里看不到任何东西。我错过了什么吗?
    • 嗯,可以在我的手机上使用。您如何检查该文件是否已创建?你使用一些文件资源管理器应用程序吗?或者adb shell
    • 我使用文件资源管理器。我检查了存储状态,它显示shared --> 媒体存在未安装,并通过 USB 大容量存储共享。我不明白“安装”是什么意思。我想当我将设备连接到 PC 时,它就被安装了。
    • 您应该“取消共享”USB 存储。当您通过 USB 共享您的 SD 卡时,您的外部存储在 Android 上处于只读模式。请参阅我对答案的编辑,我添加了 Toast 而不是 Log 的用法。这应该可以知道出了什么问题(如果您共享了 USB 设备,您应该会看到 Toast 消息。
    • 好的,我环顾四周,似乎没有什么可以添加到代码中的。如何“取消共享”存储空间?
    【解决方案2】:

    忘记更新了。 当我简单地拔下设备并运行应用程序时,问题就消失了。一位朋友告诉我他遇到了同样的问题并通过关闭任何可能访问 SD 卡的应用程序来解决它,例如Windows 资源管理器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      相关资源
      最近更新 更多