Java .renameTo函数的替代方法
我一直在尝试使用以下代码重命名java中的文本文件Java .renameTo函数的替代方法,java,file,text,rename,file-writing,Java,File,Text,Rename,File Writing,我一直在尝试使用以下代码重命名java中的文本文件 tempFile.renameTo(inFile) 但是,它似乎没有重命名该文件 我的项目的目标是编辑文本文件中的一行文本。 1.首先读取文件并将该行存储为oldLine。 2.获取编辑的行并将其存储为换行符。 3.将换行符写入临时文件。 4.删除主文件并将临时文件重命名为主文件的名称 是否有此重命名功能的替代方案 用完整代码编辑 try { File inFile = new File("Members.txt");
tempFile.renameTo(inFile)
但是,它似乎没有重命名该文件
我的项目的目标是编辑文本文件中的一行文本。1.首先读取文件并将该行存储为oldLine。
2.获取编辑的行并将其存储为换行符。
3.将换行符写入临时文件。
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);
}
Path source = tempFile.toPath();
Path newdir = inFile.toPath();
Files.move(source, newdir, REPLACE_EXISTING);
用文件更新。移动
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);
}
Path source = tempFile.toPath();
Path newdir = inFile.toPath();
Files.move(source, newdir, REPLACE_EXISTING);
上面的代码给出了以下错误:
java.nio.file.FileSystemException:Members.txt:进程无法访问该文件,因为它正被另一个进程使用。
我以为我已经关闭了所有的读写器,所以这个错误真的不应该出现。我不知道在没有看到代码的情况下会出什么问题,但是由于Java SE 7,建议移动/重命名文件的方法是(NIO.2文件API)。根据您的描述,这很可能是因为您没有正确关闭InputStream。但是没有代码所以。。。请在文件读取循环中创建一个。未定义
换行符
,您的意思是换行符
?变量换行符将传递给方法。所以它不需要定义。您是否在编辑器/查看器中打开了测试文件?或者以前的调试会话尚未终止?“(an)other process”通常只是一些进程,而不是您正在执行的代码。我已经关闭了Netbeans并重新打开了它,而且似乎没有任何进程在后台运行。但是,该文件似乎仍然没有重命名。即使文本文件位于同一目录中,此操作是否有效?您编写的是先删除主文件。此外,还有一个替换现有选项。在Javadoc中:“将文件移动或重命名为目标文件”我尝试使用Files.Move,但遇到以下问题:java.nio.file.FileSystemException:Members.txt:进程无法访问该文件,因为它正被另一个进程使用。