Android Studio — FileWriter не может быть ничего назначен, остается нулевым

#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() , не уверен, что это проблема с разрешением, даже не уверен, как это проверить.