2012-10-10 64 views
2

我有一个应用程序可以创建一个配置文件和一个日志文件。我将它们存储在外部存储器中,但是当我在我的android模拟器中尝试时,它不起作用,因为外部存储器不可写。如果发生这种情况,我应该在哪里存储文件?我应该在Android中存储文件?

这是我的代码:

private void createConfigurationFile(){ 
    File ssConfigDirectory = 
     new File(Environment.getExternalStorageDirectory()+"/MyApp/config/"); 
    File file = new File(ssConfigDirectory, mUsername+".cfg"); 

    if(!file.exists()){ 
     try{ 
      String state = Environment.getExternalStorageState(); 
      if (!Environment.MEDIA_MOUNTED.equals(state)){ 
       ssConfigDirectory = new File("PATH_WHERE_I_SHOULD_STORE_IT"); 
      } 
      File ssLogDirectory = new File(ssConfigDirectory+"/SweetSyncal/log/"); 
      ssLogDirectory.mkdirs();     
      ssConfigDirectory.mkdirs(); 

      File outputFile = new File(ssConfigDirectory, mUsername+".cfg");     
      FileOutputStream fOut = new FileOutputStream(outputFile); 
      OutputStreamWriter osw = new OutputStreamWriter(fOut); 

      writeFile(osw); 
      osw.flush(); 
      osw.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 
+0

你有写权限到外部存储? –

+0

在我的清单中我做了,但外部存储状态不是MEDIA_MOUNTED,所以我不能在那里写。在我的真实设备中,它工作正常。 –

回答

3

如果文件不是太大,你可以将其保存在设备的内部存储。

访问内部存储,您可以使用以下方法:

FileOutputStream openFileOutput (String name, int mode)

(您需要的Context的情况下使用它)

例子:

String FILENAME = "hello_file"; 
String string = "hello world!"; 

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 
fos.write(string.getBytes()); 
fos.close(); 

由于为什么你提供的代码不工作,那么有两种可能性:

  1. 您忘了添加必需的权限(WRITE_EXTERNAL_STORAGE)。
  2. 您的模拟器没有启用SD卡。假设你正在使用Eclipse,你可以在AVD管理器中启用它。只需编辑您的AVD实例,并在相应的字段中输入SD卡的大小。您还应该添加名为SD Card Support的硬件功能并将其设置为TRUE。

在官方开发者指南中有一篇很棒的文章,它会告诉你一切你需要知道的关于Android存储的知识。

可以读取它HERE

相关问题