testing文件是否存在

我试图在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) { } 

,但如果文件不存在,则会引发未find文件exception。 我想知道如何在testing文件是否存在之前试图打开它。

我想最好的方式来知道,如果一个文件存在,而不真正试图打开它,如下所示:

 File file = getContext().getFileStreamPath(FILE_NAME); if(file.exists()) ... 

希望有所帮助,再见!

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

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

所以看起来你的“testing”是个例外。

你也可以尝试使用标准

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

但是这不被推荐。 Context.openFileInput()和Context.openFileOutput()确保您保留在设备上的应用程序存储上下文中,并且在卸载应用程序时,所有文件都会被删除。

使用标准的java.io.File这是我创build的function,并正常工作:

 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(); } 

为什么不只是抓到FileNotFoundexception,并把它作为文件不存在。

如果你想确保一个文件存在(即如果它不存在创build一个新的,如果它不删除它)然后使用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(); } } 

如果你想在任何情况下打开一个文件(即如果它不存在创build一个新的,如果它附加到旧的),你可以使用这个,没有必要的testing:

 public static void write_custom_log(String message){ File root = Environment.getExternalStorageDirectory(); try{ BufferedWriter fw = new BufferedWriter(new FileWriter(new File("/mnt/sdcard/tjb_tests/tjb_log_file.txt"),true)); if (root.canWrite()){ fw.write(message); fw.close(); } } catch (IOException e) { Log.e("One", "Could not write file " + e.getMessage()); } } 

我的build议是检查文件的长度。 if file.length() returns 0意味着文件不存在。