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】:

在检查文件是否存在之前不要创建PrintWriterPrintWriter 是导致文件被写入的原因。

【讨论】:

【参考方案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

顺便说一句,您的代码太复杂了。除了变量selectedFilenewFile,它们都是新创建的文件对象,您可以简单地使用对话框返回的文件对象: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.

当文件被拒绝访问与目录被拒绝访问时,File.Exists 的行为不同

GIT提交代码出错File exists.