我正试图在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)
{ }
,但如果文件不存在,则抛出未找到文件的异常。我想知道如何在尝试打开文件之前测试文件是否存在。
答案 0 :(得分:161)
我认为知道文件是否存在的最佳方法如下,而不是实际尝试打开它,如下所示:
File file = getContext().getFileStreamPath(FILE_NAME);
if(file.exists()) ...
希望有所帮助,再见!
答案 1 :(得分:26)
文档说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()确保您保留在设备上的应用程序存储上下文中,并确保所有文件都获得 卸载应用时删除。
答案 2 :(得分:5)
使用标准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();
}
答案 3 :(得分:2)
为什么不抓住FileNotFound异常并将其作为文件不存在。
答案 4 :(得分:1)
如果你想确保一个文件存在(如果它不存在则创建一个新文件,如果它存在则不删除它)然后使用File.createNewFile:
https://docs.oracle.com/javase/7/docs/api/java/io/File.html#createNewFile()
e.g。
{
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();
}
}
答案 5 :(得分:0)
如果你想在任何情况下打开一个文件(如果它不存在则创建一个新文件,如果它确实附加到旧文件)你可以使用它,不需要测试:
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());
}
}
答案 6 :(得分:-2)
我的建议是检查文件的长度。 if file.length() returns 0
表示文件不存在。