#java #android #filewriter
#java #Android #filewriter
Вопрос:
Я получаю исключение нулевого указателя в этом методе. Выполнив пошаговую отладку и попробовав несколько разных макетов и методов записи файлов, я понял, что моя проблема, похоже, заключается в том, что мне не удается найти способ правильно присвоить значение объекту FileWriter:
public void scriviEccezioneSuLog (String rigaDaScrivere){
try (FileWriter scrittoreFile = new FileWriter(fileLogUltimaEsecuzione, true)){ //TODO: null pointer exception
scrittoreFile.write("n*ECCEZIONE: " rigaDaScrivere);
} catch (IOException eccezioneScrituraFile) {
System.out.println("Eccezione nella scrittura del file di log.");
}
}
Файловый объект fileLogUltimaEsecuzione определяется как:
private File fileLogUltimaEsecuzione = new File(Environment.getExternalStorageDirectory(), "/ultimaEsecuzione.log");
Во время отладки файловый объект, похоже, действительно имеет предполагаемое значение, поэтому оно не равно null.
И все же после попытки с ресурсами:
FileWriter scrittoreFile = new FileWriter(fileLogUltimaEsecuzione, true)
scrittoreFile остается нулевым.
Примечание: у меня нет этой проблемы при попытке использовать тот же код в другой Java IDE (я попытался запустить его на ApacheNetBeans, и он безупречен).
Редактировать:
Дополнительная информация: файл ultimaEsecuzione.журнал создается как переменная класса и создается в конструкторе следующим образом:
try {
fileLogUltimaEsecuzione.createNewFile());
} catch (IOException ecccezioneIO) {
System.out.println("Eccezione IO nella creazione del file di log.");
}
Однако, когда я проверяю .exists()
файл сразу после его создания, я получаю «false».
Комментарии:
1. File FileWriter больше не работает на Android 10/11. Файлы в разделе sdcard должны быть получены с помощью API MediaStore. Найдите «Хранилище с областью действия Android».
2. Сначала попробуйте fileLogUltimaEsecuzione.exists(), чтобы узнать, есть ли у вас доступ. Укажите, какая версия Android используется. Конечно, класс File и FileWriter можно использовать и на Android Q . Но вы должны использовать правильные пути и иметь правильные разрешения.
3.
"/ultimaEsecuzione.log"
Кто поместил туда этот файл? Поместите это утверждение в начало вашего кода, пожалуйста, вместо того, чтобы упоминать его впоследствии.4. Как мне проверить, какую версию Android я использую? в build.gradle я вижу «compileSdkVersion 30», не уверен, что это то, о чем вы просите, я очень новичок в разработке Android.
5. Прямо сейчас кажется, что я вылетаю при каждом вызове
.createNewFile()
, не уверен, что это проблема с разрешением, даже не уверен, как это проверить.