我是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”中。 谢谢。
答案 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的方法来显示此文件。