繁体   English   中英

Android写入文件 - 找不到文件

[英]Android write to file - can't find file

我是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”中。 谢谢。

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

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

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

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

在您的清单中放置<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE">

是一个参考。

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

如何在Android中运行Media Scanner

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM