Java file.exists() 错误

标签 java io save jfilechooser

我目前正在为我的面向对象的 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/

相关文章:

java - Android最佳实践: Bootstrap MainActivity with token

java - 为什么代码覆盖率有时会计算方法名称或右括号?

io - 使用 MPI IO 并行输出到单个文件

java - 就性能而言, `java.net` 和 `java.nio` 的替代方案是什么?

c++ - 有没有办法在 C++ 应用程序的多次执行中保存一个值?

java - 线程死锁避免

java - Jbutton Action 监听器

c - 将读取缓冲区内容存储在字符串中

java - 使用 Eclipse 保存 Android 应用程序的数据

android - 删除并安装应用程序后取回共享首选项