Android-Как создать новый файл для записи?

#java #android #android-studio

Вопрос:

У меня есть служба Jobintent, которая создает файл, чтобы добавить в него текст, но я получаю сообщение об ошибке /data/user/0/com.example.projet/files/log.txt (Is a directory) . Я не знаю, что я сделал не так… Вот мой код :

 public void ecritureLog(Context context) {

        File path = context.getFilesDir();
        File file = new File(path, "log.txt");

        if (!file.exists()) {
            try {
                file.createNewFile();
            } catch (Exception e) {
                Log.d("Debug ecriture log", "exeption levée : "   e.getMessage());
            }
        }

        try {
            FileOutputStream stream = new FileOutputStream(file);
            stream.write("text-to-write".getBytes());
            stream.close();
        } catch (Exception e) {
            Log.d("Debug ecriture log", "exeption levée : "   e.getMessage());
        }
    }
 

Кроме того, мне нужен своего рода файл журнала, поэтому я хочу получить к нему доступ с телефона, но /data/user/0/com.example.projet/files/log.txt это скрытый путь к пользователю…
Я уже пытался Environment.getDataDirectory() , но у меня нет разрешения, даже если они есть в манифесте…

Изменить : Вот мои разрешения на манифест :

     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 

Спасибо за вашу помощь !

Комментарии:

1. baeldung.com/java-write-to-file

2. для чтения и записи файлов вам необходимо добавить разрешения на запуск.

3. @Stultuske Проблема на самом деле не в написании, а в создании, потому что log.txt рассматривается как каталог, а не как файл, который я не могу в нем записать… В статье, которую вы мне дали, просто кратко изложено то, что я сделал для написания части…

4. @ahmadbajwa У меня уже есть READ_EXTERNAL_STORAGE amp; WRITE_EXTERNAL_STORAGE . Я не знаю, кого из них не хватает…

5. время выполнения означает добавление кода java из этих разрешений.

Ответ №1:

Со всеми вашими комментариями, ребята, это работа, так что есть окончательный код :

 public void ecritureLog(Context context) {

        File path = context.getExternalFilesDir(null);
        File file = new File(path, "/log.txt");

        if (file.exists() amp;amp; file.isDirectory() ) {
            if (!file.delete()){
                Log.d("Debug ecriture log", "!file.delete()");
                return;
            }
        }

        try {
            FileOutputStream stream = new FileOutputStream(file);
            Log.d("Debug ecriture log", "chemin: "  file.getAbsolutePath());
            stream.write("text-to-write".getBytes());
            stream.close();
        } catch (Exception e) {
            Log.d("Debug ecriture log", "exeption levée : "   e.getMessage());
        }
    }
 

Спасибо!