Android如何检查文件是否存在,或者创建一个?

Android如何检查文件是否存在,或者创建一个?,android,file,Android,File,我有以下问题。我想将一个名为data.xml的文件放入sdcard/appname文件夹,并将其用于读写应用程序数据 因此,当我的主要活动创建时,我需要检查此文件是否存在: public class appname extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s

我有以下问题。我想将一个名为data.xml的文件放入sdcard/appname文件夹,并将其用于读写应用程序数据

因此,当我的主要活动创建时,我需要检查此文件是否存在:

public class appname extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setContentView(R.layout.no_elements_l);

      File file = getBaseContext().getFileStreamPath("/sdcard/appname/data.xml");
      if(file.exists()) { 

            return;

      } else {

            // create a File object for the parent directory
            File MTdirectory = new File("/sdcard/appname/");

            // have the object build the directory structure, if needed.
            MTdirectory.mkdirs();

            // create a File object for the output file
            File outputFile = new File(MTdirectory, "data.xml");

            // now attach the OutputStream to the file object, instead of a String representation
            FileOutputStream DataFile = new FileOutputStream(outputFile);
      }

但我在最后一行有未处理的异常类型FileNotFoundException。有什么问题吗?使用权限写入外部存储添加到清单。

路径“/sdcard/appname”是否存在?在检查子目录“appname”之前,请先检查该文件。在尝试访问其中的文件之前,需要检查该文件是否存在


另外,如果您只是需要该文件来读写应用程序数据,为什么不直接使用内部存储—少一个清单权限:)->

不要硬编码SD卡文件路径。对于不同的设备和API,它可以是不同的

例如,Froyo的
/mnt/sdcard/
,而我的Galaxy Nexus(JellyBean)的
/storage/sdcard0/

建议使用
Environment.getExternalStorageDirectory()

试着这样做:

// Some Code

String path = Environment.getExternalStorageDirectory().getPath() + "/appname/";
File file = getBaseContext().getFileStreamPath(path);

// More Code

理论上,另一个进程可能会删除
file.exists()
和输出流构造之间的文件。通常,您必须捕获已检查的基于IO的异常,并以某种方式处理可能的错误-例如,显示带有诊断和“重试”/“退出”按钮的消息框。好的,谢谢大家。我已经考虑过从内存读/写数据,将来也许我会选择导出到sd选项:)绝对同意。然而,我们遇到了一些设备,它们的制造商将覆盖getExternalStorageDirectory以指向本地存储,而不是SD卡(这令人愤怒)。仅供参考。