Я пытался переименовать текстовый файл в java, используя следующий код.Альтернативы функции .renameTo
tempFile.renameTo(inFile)
Однако, похоже, что это не переименование файла.
Цель моего проекта - отредактировать строку текста в текстовом файле.
1. Сначала читает файл и сохраняет строку как oldLine.
2. Делает отредактированную строку и сохраняет ее как newLine.
3. Записывает newLine во временный файл.
4. Удаляет основной файл и переименовывает временный файл в имя основного файла.
Есть ли альтернатива этой функции переименования?
Редактировать с Полный код
try {
File inFile = new File("Members.txt");
File tempFile = new File("MembersTemp.txt");
BufferedReader BR = new BufferedReader(new FileReader(inFile));
PrintWriter PW = new PrintWriter(new FileWriter(tempFile));
inFile.setReadable(true);
inFile.setWritable(true);
tempFile.setReadable(true);
tempFile.setWritable(true);
String line = null;
while ((line = BR.readLine()) != null) {
if (!old.equals(newLine)) {
//String replace = old.replace(old, newLine);
PW.println(newLine);
PW.flush();
}
}
PW.close();
BR.close();
if (!tempFile.renameTo(inFile)) {
JOptionPane.showMessageDialog(
null,
"Error",
"Edit File",
JOptionPane.WARNING_MESSAGE);
} else {
JOptionPane.showMessageDialog(
null,
"File saved successfully",
"Edit File",
JOptionPane.INFORMATION_MESSAGE);
}
dispose();
new Edit_Member().setVisible(true);
} catch (IOException | HeadlessException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(
null,
"Catch Error",
"Edit File",
JOptionPane.WARNING_MESSAGE);
}
Обновлены Files.move
Path source = tempFile.toPath();
Path newdir = inFile.toPath();
Files.move(source, newdir, REPLACE_EXISTING);
Приведенный выше код дает мне следующее сообщение об ошибке:
java.nio.file .FileSystemException: Member.txt: процесс не может получить доступ к файлу потому что он используется другим процессом.
Я думал, что закрыл всех своих читателей и писателей, поэтому эта ошибка действительно не должна присутствовать.
Из вашего описания, это очень вероятно из-за того, что вы не правильно закрыли свой InputStream. Но нет кода, поэтому ... пожалуйста, сделайте [mcve]. – Tunaki
В вашем цикле чтения файла 'newLine' не определен, вы имеете в виду' line'? – SamTebbs33
Переменная newLine передается методу. Поэтому его не нужно определять. – JSmithers