Java file.exists() 错误
Posted
技术标签:
【中文标题】Java file.exists() 错误【英文标题】:Java file.exists() Errors 【发布时间】:2014-11-30 23:43:22 【问题描述】:我目前正在为我的面向对象的 Java 类编写一个“记事本 - 类型”文件。我已经完成了大部分程序 - 但是我遇到了以下问题:
当程序试图保存文件时,它应该首先检查文件是否存在,显然如果文件存在程序会提示用户是否允许覆盖文件的现有副本[覆盖提示不是还没有写,但它会进入 if(selectedFile.exists() == true) 代码部分] - 如果文件不存在,程序将创建它。
我遇到的问题是程序总是创建文件 在检查文件是否存在。我已经看过可能 20-30+ 类似问题的答案——主要是在 *** 上,但还没有找到我需要的答案。我不确定我是否只是“没有得到它”,或者我真的做错了什么..
任何答案 - 或提示在哪里可以找到答案 - 这个问题将不胜感激。
谢谢。
完整代码(程序的save部分如下所示)。
else if(source == saveFile)//-------------------------//SAVE FILE//--------------------------
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
fileChooser.setDialogTitle("JavaPad - Save File");
int result = fileChooser.showSaveDialog(fileChooser);
String myFile;
try
if(result == JFileChooser.APPROVE_OPTION)
myFile = fileChooser.getSelectedFile().getName();
File selectedFile = new File(myFile);
String[] lines = textArea.getText().split(System.getProperty("line.separator"));
readToSave = new Scanner(lines.toString()); // CANNOT use toString() on an Array - THIS WILL BE CHANGED PROPERLY?
PrintWriter savePWriter = new PrintWriter(selectedFile);
if(selectedFile.exists() == true)
JOptionPane.showMessageDialog(null, "This file already exists.");
statusLabel.setText("File Save Aborted...");
else
System.out.println("Creating File: " + myFile);
File newFile = new File(fileChooser.getSelectedFile().getName());
savePWriter = new PrintWriter(newFile);
int i = 0;
while(i < lines.length)
savePWriter.append(lines[i] + "\n");
System.out.println("Lines appended = " + i);
i++;
savePWriter.flush();
savePWriter.close();
statusLabel.setText("File Saved.");
else
JOptionPane.showMessageDialog(null, "Save has been canceled.");
catch(IOException iosaveError)
System.out.println(IOSaveError);
【问题讨论】:
【参考方案1】:在您检查selectedFile
是否存在之前,您正在调用创建文件的new PrintWriter(selectedFile)
。
【讨论】:
【参考方案2】:在检查文件是否存在之前不要创建PrintWriter
。 PrintWriter
是导致文件被写入的原因。
【讨论】:
【参考方案3】:你这样做:
myFile = fileChooser.getSelectedFile().getName();
File selectedFile = new File(myFile);
PrintWriter savePWriter = new PrintWriter(selectedFile); // Creates File! Probably unwanted.
if(selectedFile.exists() == true) // always true because of the line above
顺便说一句,您的代码太复杂了。除了变量selectedFile
和newFile
,它们都是新创建的文件对象,您可以简单地使用对话框返回的文件对象:newFile = fileChooser.getSelectedFile()
。
if(selectedFile.exists() == true)
可以简化为
if (selectedFile.exists())
我建议尽可能使用 try-with-resources 进行 I/O:
try (final PrintWriter writer = new PrintWriter(selectedFile))
// Use writer
这有助于意外忘记关闭流。
【讨论】:
以上是关于Java file.exists() 错误的主要内容,如果未能解决你的问题,请参考以下文章
File.Exists + File.Move 错误“该进程无法访问该文件,因为它正被另一个进程使用。”
RTNETLINK answers: File exists错误解决方法
备机keepalived报如下错误 : Keepalived_vrrp: Netlink: error: File exists
git提交代码出现错误fatal: Unable to create '项目路径/.git/index.lock': File exists.