#java #file #io #java-io #formatter
Вопрос:
Я хочу, чтобы моя программа создала файл для пользователя (только в первый раз) и записала в него некоторую информацию (это не просто строка, и ее также можно настроить в любое время позже). Поэтому я сделал это:
public void write() {
try {
file = new File("c:\Users\Me\Desktop\text.txt");
if(!file.exists()) // I found this somewhere on the internet for File class
file.createNewFile(); // not to remove contents. I have no idea if it works
writer = new Formatter(file);
} catch(Exception e) {
e.printStackTrace();
}
writer.format("%s %s ", nameInput.getText(),lastNameInput.getText());
writer.close();
}
Это работает, но есть некоторые проблемы:
- Когда файл открывается позже, по умолчанию класс File удаляет его содержимое.
- Когда информация записывается в файл и форматер закрывается, в следующий раз где-нибудь в другом месте программы, когда я снова использую его для записи в файл, информация обновляется и не добавляется к предыдущим. И если я его не закрою, он не будет писать.
Комментарии:
1. Вместо того, чтобы переходить
file
непосредственно вFormatter
конструктор, вы можете сначала обернуть его тудаnew FileWriter(f,true)
, гдеtrue
включен режим добавления, и передать эту запись. Но помимо этого, есть ли какая-то конкретная причина, по которой вы используетеFormatter
вместо более распространенногоPrintStream
илиPrintWriter
(оба предоставляютformat("format", data...)
метод)?2. @Pshemo да,я использую форматирование, потому что я хочу, чтобы информация была в том формате, в котором я хочу, чтобы она была, тогда я смогу прочитать их с помощью класса сканера. Я знаю, что есть много других занятий, которые лучше использовать здесь, но я использую их как часть практики. Я немного новичок в концепциях ввода-вывода, и считалось, что я использую их для простого письма и чтения.
3.
found this somewhere on the internet
есть одно место, где вы должны найти определение того, как должна работать среда выполнения Java. Начиная с 2021/06 года сделайте это 16-м изданием документации Java Standard Edition , например, для nio .
Ответ №1:
прежде всего, этот код здесь:
if(!file.exists())
file.createNewFile();
он создает новый файл только в том случае, если он не существует в вашем пути.
Чтобы записать свой файл без перезаписи, я рекомендую вам сделать это:
FileWriter fileWriter;
public void write() {
try {
file = new File("c:\Users\Me\Desktop\text.txt");
if(!file.exists())
file.createNewFile();
// use a FileWriter to take the file to write on
fileWriter = new FileWriter(file, true); // true means that you do not overwrite the file
writer = new Formatter(fileWriter); // than you put your FileWriter in the Formatter
} catch(Exception e) {
e.printStackTrace();
}
writer.format("%s %s ", nameInput.getText(),lastNameInput.getText());
writer.close();
}
Надеюсь, это было полезно! 🙂
Комментарии:
1.
true means that you overwrite the file
на самом деле все наоборот… Ничего не будет перезаписано, вместо этого будет добавлено новое содержимое. Кроме тогоFileWriter fileWriter;
, это, вероятно, должно быть не поле, а локальная переменная.2. @Pshemo благодаря вам обоим моя проблема решена.
Ответ №2:
Как уже упоминалось выше, мне пришлось передать файл через конструктор класса FileWriter. таким образом, моя первая проблема была решена (я упомянул о них в вопросе), а для второй мне приходилось заново открывать форматер всякий раз, когда я хотел добавить больше.
public void write() {
try {
writer = new Formatter(new FileWriter(file,true);
} catch(Exception e) {
e.printStackTrace();
}
writer.format("%s %s ", nameInput.getText(),lastNameInput.getText());
writer.close(); }
создание и инициализация файла должны быть выполнены один раз и вне метода.
Комментарии:
1. Если вы ознакомились с документацией, вы должны были заметить форматирование пустоты. флеш() .
2. (Первоначальная редакция этого ответа не указывает точно, что в представленном коде имеет значение в отношении «Класса файла, не удаляющего содержимое». (
java.io.File
поскольку путь с неправильным именем, неудивительно, что он никоим образом не влияет на содержимое файла .))