Перезапись txt-файла на java
код, который я написал, должен перезаписать содержимое выбранного текстового файла, но он добавляет его. Что я делаю не так?
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
FileWriter f2;
try {
f2 = new FileWriter(fnew,false);
f2.write(source);
/*for (int i=0; i<source.length();i++)
{
if(source.charAt(i)=='n')
f2.append(System.getProperty("line.separator"));
f2.append(source.charAt(i));
}*/
f2.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
редактировать
Я попытался сделать новый темп.txt-файл и запись нового содержимого в него, удаление этого текстового файла и переименование temp.txt в этом. Дело в том, что удаление всегда неудачно. Я не думаю, что мне нужно изменить разрешения пользователя для этого, не так ли?
кроме того, часть в моей программе перечислены все файлы в этом каталоге, поэтому я предполагаю, что они используются программой и поэтому не могут быть удалены. Но почему бы не перезаписать?
решить
мой самый большой" d'Oh " момент! Я компилировал его на Eclipse, а не cmd, где я его выполнял. Поэтому мои недавно скомпилированные классы отправились в папку bin, а скомпилированный файл класса через командную строку остался прежним в моей папке src. Я перекомпилировал свой новый код и он работает как шарм.
File fold=new File("../playlist/"+existingPlaylist.getText()+".txt");
fold.delete();
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
try {
FileWriter f2 = new FileWriter(fnew, false);
f2.write(source);
f2.close();
} catch (IOException e) {
e.printStackTrace();
}
5 ответов
ваш код отлично работает для меня. Он заменил текст в файле, как ожидалось, и не добавил.
Если вы хотите добавить, вы устанавливаете второй параметр в
new FileWriter(fnew,false);
истина;
добавить еще одну строку после инициализации объекта file
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
fnew.createNewFile();
решить
мой самый большой" d'Oh " момент! Я компилировал его на Eclipse, а не cmd, где я его выполнял. Поэтому мои недавно скомпилированные классы отправились в папку bin, а скомпилированный файл класса через командную строку остался прежним в моей папке src. Я перекомпилировал свой новый код, и он работает как шарм.
File fold=new File("../playlist/"+existingPlaylist.getText()+".txt");
fold.delete();
//File temp=new File("../playlist/temp.txt");
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
/*FileWriter f2;
PrintWriter pw;
try {
f2 = new FileWriter(fnew,false);
pw= new PrintWriter(f2);
f2.write(source);
/*for (int i=0; i<source.length();i++)
{
if(source.charAt(i)=='\n')
f2.append(System.getProperty("line.separator"));
f2.append(source.charAt(i));
}*/
try {
FileWriter f2 = new FileWriter(fnew, false);
f2.write(source);
f2.close();
//fnew.renameTo(fold);
//fold.renameTo(temp);
//temp.deleteOnExit();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Это немного упрощает его, и он ведет себя так, как вы хотите.
FileWriter f = new FileWriter("../playlist/"+existingPlaylist.getText()+".txt");
try {
f.write(source);
...
} catch(...) {
} finally {
//close it here
}
самый простой способ перезаписать текстовый файл-использовать открытое статическое поле.
это будет перезаписывать файл каждый раз, потому что вы используете только false первый раз.`
public static boolean appendFile;
использовать его, чтобы разрешить только один раз через последовательность записи для поля добавить код записи должен быть false.
// use your field before processing the write code
appendFile = False;
File fnew=new File("../playlist/"+existingPlaylist.getText()+".txt");
String source = textArea.getText();
System.out.println(source);
FileWriter f2;
try {
//change this line to read this
// f2 = new FileWriter(fnew,false);
// to read this
f2 = new FileWriter(fnew,appendFile); // important part
f2.write(source);
// change field back to true so the rest of the new data will
// append to the new file.
appendFile = true;
f2.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}