java - file路径 - android write file




测试文件是否存在 (5)

我试图在android中打开一个文件,如下所示:

  try
   {
      FileInputStream fIn = context.openFileInput(FILE);
      DataInputStream in = new DataInputStream(fIn);
      BufferedReader br = new BufferedReader(new InputStreamReader(in));
      if(in!=null)
          in.close();
   }
   catch(Exception e)
   {  }

,但是如果文件不存在,则抛出未找到文件的异常。 我想知道如何在尝试打开文件之前测试文件是否存在。


为什么不抓住FileNotFound异常并将其作为文件不存在。


使用标准java.io.File这是我创建的函数,并且正常工作:

private static final String APP_SD_PATH = "/Android/data/com.pkg.myPackage";
...
public boolean fileExistsInSD(String sFileName){
    String sFolder = Environment.getExternalStorageDirectory().toString() + 
            APP_SD_PATH + "/Myfolder";
    String sFile=sFolder+"/"+sFileName;
    java.io.File file = new java.io.File(sFile);
    return file.exists();
}

如果你想确保一个文件存在(即如果它不存在则创建一个新文件,如果确实存在则不删除它),那么使用File.createNewFile:

https://docs.oracle.com/javase/7/docs/api/java/io/File.html#createNewFile()

例如

{
        String pathName = <file path name>
        File file = new File (pathName);
        Uri pathURI = Uri.fromFile (file);
        boolean created;

        String mIOException = "";
        String mSecException = "";

        try
        {
            created = file.createNewFile();

            if (created)
            {
                ctxt.sendBroadcast (new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, pathURI));
            }
        }
        catch (IOException ioex)
        {
            mIOException = ioex.getMessage();
        }
        catch (SecurityException sex)
        {
            mSecException = sex.getMessage();
        }

}

我的建议是检查文件的长度。 if file.length() returns 0表示文件不存在。


文档说Context.openFileInput返回一个inputStream(找到的文件)或抛出一个FileNotFoundException(未找到)

http://developer.android.com/reference/android/content/Context.html#openFileInput(java.lang.String)

所以看起来例外是你的“测试”。

您也可以尝试使用标准

java.io.File file = new java.io.File(PATHTOYOURCONTEXT , FILE);
if (file.exists()) {
    FileInputStream fIn = new FileInputStream(file);
}

但不建议这样做。 Context.openFileInput()和Context.openFileOutput()确保您保留在设备上的应用程序存储上下文中,并在卸载应用程序时删除所有文件。





file