【问题标题】:Result of 'File.createNewFile()' is ignored'File.createNewFile()' 的结果被忽略
【发布时间】:2021-05-16 07:02:39
【问题描述】:

我不确定为什么会这样,但在我的 IDE 中,对于 file.createNewFile();,我得到了 Result of 'File.createNewFile()' is ignored,我不知道我应该做什么

import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;

public class SQL {

    public Connection connection;

    public SQL(File file) {
        try {
            file.createNewFile(); // Result of 'File.createNewFile()' is ignored
            Class.forName("org.sqlite.JDBC");
            connection = DriverManager.getConnection("jdbc:sqlite:" + file.getAbsolutePath());
        } catch(Exception exception) {
            exception.printStackTrace();
        }
    }
}

【问题讨论】:

    标签: java sql sqlite


    【解决方案1】:

    检查createNewFile() 方法的返回值可能是个好主意。如果返回 false,则表示该文件已经存在。这可能不是您所期望的,因为该文件用于指定数据库 URL。

    【讨论】:

      【解决方案2】:

      createNewFile() 方法返回一个布尔值(truefalse)。 false 表示文件已经存在。 true 表示文件不存在,已创建。

      您在 IDE 中看到的警告只是让您知道您忽略了该值,这可能取决于您的要求。另一种可能是这样的:

      if(file.createNewFile()) {
          // do something
      } else {
          // do something else
      }
      

      【讨论】:

        【解决方案3】:

        您的 IDE 中针对 createNewFile 的静态代码检查可能会抱怨这一点,因为 createNewFile 返回一个布尔值。这样做是为了让您有办法确定文件的创建是否成功并采取相应的行动。现在布尔结果没有分配给任何变量,所以它被忽略了。

        理想情况下,您应该检查file.createNewFile() 的结果并验证文件是否真的被创建,然后再继续设置连接。

        // Create File
        boolean fileCreated = file.createNewFile()
        // Validate that file actually got created
        if (!fileCreated) {
            throw new IOException("Unable to create file at specified path. It already exists");
        }
        
        // Proceed to setting up connection
        Class.forName("org.sqlite.JDBC");
        connection = DriverManager.getConnection("jdbc:sqlite:" + file.getAbsolutePath());
        

        【讨论】:

          【解决方案4】:

          我无法复制您的问题以获取特定的错误消息。应该注意的是,File.createNewFile() 在不存在同名文件的情况下有效。我建议这样做来检查文件是否已经存在:

          public class SQL {
              public static Connection connection;
              public SQL(File file) throws IOException {
                  File file = new File("C:/users/capoo/Desktop/file_test.txt");
                  if (!file.createNewFile()) {
                      throw new IOException("File already exists");
                  } else {
                      try {
                          Class.forName("org.sqlite.JDBC");
                          connection = DriverManager.getConnection("jdbc:sqlite:" + file.getAbsolutePath());
                      } catch(Exception exception) {
                          exception.printStackTrace();
                      }
                  }
              }
          }
          

          【讨论】:

          • “我无法复制您的问题以获取特定的错误消息。” - 这不是一个真正的错误。这是一个警告。可能是您在 IntelliJ IDEA 实例中关闭了该警告,但我相信它默认启用。我能够轻松地复制它。警告会在任何时候忽略返回值时发生,而不仅仅是这个特定的方法调用。
          • @JeffScottBrown 因为我没有使用 IntelliJ IDEA,所以这很有意义!感谢您为我澄清。
          • 道歉。我误读了原来的问题。我认为这个问题是专门关于 IDEA 的,但问题只是说 IDE。那是我的错误。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-30
          • 2020-05-01
          相关资源
          最近更新 更多