【问题标题】:Android write to file - can't find fileAndroid写入文件 - 找不到文件
【发布时间】:2010-07-22 11:32:14
【问题描述】:

我是 Android 开发的新手。我尝试将某些内容写入文件。 我正在使用代码:

try {
                    FileOutputStream fOut = openFileOutput(
                            "out.txt", MODE_WORLD_READABLE);

                    OutputStreamWriter osw = new OutputStreamWriter(fOut);
                    osw.write("something");
                    osw.flush();
                    osw.close();
                    fOut.close();

                } catch (MalformedURLException e) {
                    Log.e("FILE WRITE ERROR", e.getMessage());
                } catch (IOException e) {
                    Log.e("FILE WRITE ERROR", e.getMessage());
                }

一切正常,但我在 DDMS 文件资源管理器中找不到该文件。你能帮我告诉我Android将文件保存在哪里吗?它不在“/data/data/my_project_package”中。 谢谢。

【问题讨论】:

    标签: android


    【解决方案1】:

    1) 确保在您的清单中包含此内容:

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

    2) 它有所不同,无论是使用模拟器还是设备进行测试。如果是后者,请务必从您的 PC 上卸载设备(选择:“仅充电”)。调试仍然会以这种方式工作。只是不能一边写一边看。

    此方法有效:

    public void writeToExternalStoragePublic(String filename, int content) {
        String packageName = this.getPackageName();
        String path = Environment.getExternalStorageDirectory().getAbsolutePath()+ "/Android/data/" + packageName + "/files/";
        if (isExternalStorageAvailable() && !isExternalStorageReadOnly()) {
            try {
                boolean exists = (new File(path)).exists();
                if (!exists) {
                    new File(path).mkdirs();
                }
                // Open output stream
                FileOutputStream fOut = new FileOutputStream(path + filename,true);
                // write integers as separated ascii's
                fOut.write((Integer.valueOf(content).toString() + " ").getBytes());
                fOut.write((Integer.valueOf(content).toString() + " ").getBytes());
                // Close output stream
                fOut.flush();
                fOut.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

    【讨论】:

    • 我尝试将此代码与&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&gt; 一起使用。我仍然在new FileOutputStream 行中得到FileIOException (java.io.FileNotFoundException: /mnt/sdcard/Android/data/com.foo/files/This.html: open failed: EACCES (Permission denied))。我会错过什么?我在模拟器中运行。我注意到File(path).mkdirs() 不会抛出任何异常。它也不会创建目录。
    【解决方案2】:

    似乎有很多关于这个主题的问题,问题似乎通常归结为 i) 没有在 AndroidManifest.xml 中请求权限 ii) 在应用程序运行时设备的存储被安装到计算机上运行或 iii) 模拟器设置。

    希望其他尝试了所有这些解决方案但失败的人,我提交 iv) 计算机决定在从另一台计算机上编写的源存储库中提取代码后任意忽略您在 AndroidManifest.xml 中的权限设置。就我而言,我刚刚在计算机 A 上编写了一些写入外部存储的代码。我将所述代码检查到源代码控制中,然后将所述代码拉到计算机 B。当我将应用程序从计算机 B 重新安装到设备上时,我开始收到 Permission denied 异常。

    修复:将any更改为计算机 B 上的 AndroidManifest.xml 文件(例如,在某处插入换行符)。这解决了我的问题。我不知道为什么。这可能是少数情况之一,但更令人沮丧。

    【讨论】:

      【解决方案3】:

      &lt;uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"&gt; 放入您的清单中。

      Here 是对它的引用。

      【讨论】:

        【解决方案4】:

        我发现我不需要将 USB 选项更改为“仅充电”并且可以将其保持在“文件传输”模式。但是,我确实需要调用 Android Media Scanner 的方法来显示此文件。

        How to Run Media Scanner in Android

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多