Android写入文件 - 找不到文件

时间:2010-07-22 11:32:15

标签: android

我是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 FIle Explorer中找不到该文件。你能帮助我并告诉我Android保存文件的位置吗?它不在“/ data / data / my_project_package”中。 谢谢。

4 个答案:

答案 0 :(得分:5)

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();
        }
    }
}

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE">放入您的清单。

Here就是它的参考。

答案 3 :(得分:0)

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

How to Run Media Scanner in Android