Java 当我们使用renameTo()两次失败时,为什么?

Java 当我们使用renameTo()两次失败时,为什么?,java,windows,file,rename,Java,Windows,File,Rename,我正在使用Win7。我第一次使用java重命名一个文件(file.cmptr到file.sql)来做一些事情,之后我想用他的旧名字(file.cmptr)来重命名它 但这失败了,当我重命名文件时,有时无法重命名。它是随机发生的 -有些时候,第一个文件根本没有改变,我也没有得到操作 -有时它会变成.sql文件,我得到了操作,但文件仍然是.sql 在我的例子中: 第一次更改分机时: int dotIndex = filechose.getPath().lastIndexOf('.'); Strin

我正在使用Win7。我第一次使用java重命名一个文件(file.cmptr到file.sql)来做一些事情,之后我想用他的旧名字(file.cmptr)来重命名它

但这失败了,当我重命名文件时,有时无法重命名。它是随机发生的

-有些时候,第一个文件根本没有改变,我也没有得到操作

-有时它会变成.sql文件,我得到了操作,但文件仍然是.sql

在我的例子中:

  • 第一次更改分机时:

    int dotIndex = filechose.getPath().lastIndexOf('.');
    String newpath = filechose.getPath().substring(0, dotIndex);;
    newpath = newpath + ".sql";
    File filefinal = new File(newpath); 
    filechose.renameTo(filefinal);
    String path=newpath;
    
使用新文件执行操作后:

Runtime.getRuntime().exec("cmd /c mysql -u root gestiondestock <"+'"'+path+'"');

已解决。
它与wait for i一起工作,仅更改以下内容:

  Process p = Runtime.getRuntime().exec("cmd /c mysql -u root gestiondestock <"+'"'+path+'"');

                 p.waitFor();

Process p=Runtime.getRuntime().exec(“cmd/c mysql-u root gestiondestock我怀疑您在使用文件时试图重命名该文件


您可以在mysql进程上使用waitFor,也可以使用
REN
将重命名添加到正在执行的脚本中。也就是说,它将在文件完成后重命名该文件。

我怀疑您试图在使用该文件时重命名该文件


您可以在mysql进程上使用waitFor,也可以使用
REN
将重命名添加到正在执行的脚本中。也就是说,当文件完成后,它将重命名该文件。

当您第二次尝试重命名该文件时,会出现什么错误?您说“有时失败”“但是你没有解释它是如何失败的。@DanPuzey有时文件根本不重命名没有错误
renameTo()
,因为所有其他
file
方法都不会抛出异常,它只会返回
true
false
,这取决于成功与否。当你第二次尝试重命名文件时会出现什么错误?你说“有时失败”,但您没有解释它是如何失败的。@DanPuzey有时文件根本不重命名没有错误
renameTo()
与所有其他
文件
方法一样,它不会抛出异常,只会根据成功情况返回
true
false
。在本例中,使用REN或waitFro的最佳方法是什么?我会做任何您认为更简单的事情。最有可能的是,我会使用waitFor(),然后执行重命名()。如果这不是一个选项,您可以将其添加到脚本中。在本例中,使用REN或waitFro的最佳方法是什么?我会做您认为更简单的任何事情。最有可能的情况是,我会使用waitFor(),然后执行renameTo()。如果这不是一个选项,您可以将其添加到脚本中。
  Process p = Runtime.getRuntime().exec("cmd /c mysql -u root gestiondestock <"+'"'+path+'"');

                 p.waitFor();