Да, проблема здесь в том, что если вы получаете FileNotFoundException, вы пытаетесь просто распечатать исключение и продолжить, но в этом случае переменной fos никогда не будет присвоено значение, так как вызов "openFileOutput" не будетт завершено.Это хорошо, потому что в случае, когда вы не смогли открыть файл, вы не хотите продолжать пытаться записать файл, который вы не открыли.
, поскольку FileNotFoundException являетсяIOException, вы могли бы упростить все это как:
String FILENAME = "hello_file";
String string = "hello world!";
try {
FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
В этом случае первое, что вызывает исключение, приводит к печати трассировки стека, и вы пропускаете любые последующие операции в оставшейся части попытки{} блок.
Проблема с ответом цемента состоит в том, что, хотя он и получает ошибку компилятора, если первый блок когда-либо выдает исключение, второй блок выдаст вам исключение NullPointerException.