2010-07-22 76 views
4

我是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文件资源管理器中的文件。你能帮我,告诉我Android保存文件的位置吗?它不在“/ data/data/my_project_package”中。 谢谢。

回答

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

我试着用'''使用这段代码。我仍然在FileOutputStream行中得到FileIOException(java.io.FileNotFoundException:/mnt/sdcard/Android/data/com.foo/files/This.html:open failed:EACCES(Permission denied))''。我可能会错过什么?我正在模拟器中运行。我注意到'File(path).mkdirs()'不会抛出任何异常。它也不会创建目录。 – 2011-12-26 09:12:36

1

似乎那里有很多关于这个主题,而不是要求在AndroidManifest.xml II)安装该设备的存储权限似乎往往归结到我的问题)问题到应用程序运行时的计算机或iii)仿真器设置。

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

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

1

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

Here是它的参考。

+0

此权限仅适用于系统应用程序... – 2014-03-17 16:45:58