Изменения, напечатанные в файле, не сохраняются

#java #eclipse

#java #eclipse

Вопрос:

 try{


 private fileWriter= new PrintWriter(new FileWriter(file.txt));
                fileWriter.print("hello world");
                System.out.println("file written");

                fileWriter.close();
}
catch (IOException e){
            e.printStackTrace();

        } finally {
        }
  

У меня есть этот текстовый файл в моей исходной папке. До сих пор не было никаких ошибок при доступе к нему. Однако, когда я закрываю программу или после того, как файлы должны были быть записаны, когда я открываю текстовый файл, я их там не нахожу, однако я проверил папку bin ocne и, похоже, напечатал hello world для временной копии там.

Я хочу, чтобы изменения, которые он вносит, были постоянными.

Ответ №1:

У вас есть пара проблем в вашем коде. Исправление / упрощение до следующего:

 public static void main(String[] args) throws IOException {
    PrintWriter fileWriter = new PrintWriter(new FileWriter(new File("file.txt")));
    fileWriter.print("hello world");
    System.out.println("file written");
    fileWriter.close();
}
  

позволяет создать файл, как ожидалось. Попробуйте это, и если он ведет себя не так, как вы ожидаете, тогда объясните, как это сделать. Обратите внимание, что когда вы указываете относительный путь к файлу, он преобразует путь в ваш текущий рабочий каталог. Вероятно, именно поэтому, если файл записывается куда-то, чего вы не ожидаете.

Ответ №2:

Файл в папке bin не является временным файлом, это файл, который вы на самом деле пишете. Если вы хотите выполнить запись в файл в исходной папке, вы должны использовать правильный путь к файлу при открытии файла для записи. Java всегда вычисляет относительные пути к папке, в которой вы запустили свое приложение. Таким образом, ваше приложение, вероятно, запускается в папке bin и записывает в file.txt там.

Ответ №3:

Возможно, попробуйте использовать логическое значение append в конструкторе FileWriter

public FileWriter(строковое имя файла, логическое добавление)

… и я думаю, что eclipse будет использовать папку bin в качестве пути к классу по умолчанию, поэтому неудивительно, что файл записан там.

Я надеюсь, что это поможет 🙂

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

1. к сожалению, использование append ничего не изменило, приняв его как true или false

2. Я собирался сказать, попробуйте: FileWriter. flush(); Для меня это работает нормально, но я использую BufferedWritter, я собираюсь проверить, почему они будут такими разными, если они есть… BufferedWriter out = новый BufferedWriter(новый FileWriter(«file.txt «, верно)); выход. write(«Привет, мир»); out.close();

3. да, у меня получилось, кажется, что вывод записывался только в bin, поэтому, если я зашел в проект, щелкнул правой кнопкой мыши -> настройка сборки, была возможность разрешить выходные папки для исходных папок, тогда все, что мне нужно было сделать, это изменить вывод на bin, и он начал работать

4. подумать только, все это время это был просто флажок, который нужно было установить

Ответ №4:

Поскольку код был в порядке, перейдите в обозреватель пакетов -> проект -> свойства -> путь сборки java -> источник -> установите флажок с надписью «разрешить вывод для исходных папок»