Ответ 1
Я думаю, что лучший способ узнать, существует ли файл, не пытаясь его открыть, выглядит следующим образом:
File file = getContext().getFileStreamPath(FILE_NAME);
if(file.exists()) ...
Надеюсь, что поможет, пока!
Я пытаюсь открыть файл в андроиде следующим образом:
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)
{ }
но в случае, если файл не существует, создается исключение, не найденное в файле. Я хотел бы знать, как я могу проверить, существует ли файл, прежде чем пытаться его открыть.
Я думаю, что лучший способ узнать, существует ли файл, не пытаясь его открыть, выглядит следующим образом:
File file = getContext().getFileStreamPath(FILE_NAME);
if(file.exists()) ...
Надеюсь, что поможет, пока!
В документации указано, что 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() убедитесь, что вы остаетесь в контексте хранения приложений на устройстве и что все ваши файлы удаляется, когда ваше приложение будет удалено.
При стандартном 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();
}
почему вы просто не поймаете исключение FileNotFound и считаете, что файл не присутствует.
Если вы хотите, чтобы файл существовал (т.е. если он не существует, создайте новый, если он его не удалит), используйте 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();
}
}
Если вы хотите открыть файл в любом случае (т.е. если он не существует, создайте новый, если он добавит старый), вы можете использовать его, без необходимости тестирования:
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());
}
}
Мое предложение - проверить длину файла. if file.length() returns 0
Это означает, что файл не существует.