我目前正在为我的面向对象的 Java 类编写“记事本类型”文件。我已经完成了大部分程序 - 但是我遇到了以下问题:
当程序尝试保存文件时,应该首先检查文件是否存在,显然如果文件存在,程序将提示用户是否允许覆盖文件的现有副本[覆盖提示不是尚未编写,但它将进入代码的 if(selectedFile.exists() == true) 部分] - 如果文件不存在,程序将创建它。
我遇到的问题是程序总是在检查文件是否存在之前创建文件。我已经看过大约 20-30 多个类似问题的答案 - 主要是在 stackoverflow 上,但尚未找到我需要的答案。我不确定我是否只是“不明白”,或者我是否真的做错了什么......
对此问题的任何答案 - 或关于在哪里找到答案的提示 - 将不胜感激。
谢谢。
完整代码(程序的保存部分如下所示)。
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);
}
}
最佳答案
您正在调用 new PrintWriter(selectedFile)
,它会在您检查 selectedFile
是否存在之前创建文件。
关于Java file.exists() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27219690/