【问题标题】:when we use renameTo() 2 times failed, why?当我们使用 renameTo() 2 次失败时,为什么?
【发布时间】:2012-08-23 00:49:43
【问题描述】:

我正在使用 Win7。我第一次使用java重命名文件(file.cmptr to 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+'"');

最后我想再次重命名文件

File file1 = new File(path);
int dotIndex1 = path.lastIndexOf('.');
String newpath1 = path.substring(0, dotIndex1);
newpath1 = newpath1 + ".computeramg";
File file2 = new File(newpath1); 
file1.renameTo(file2);

解决了。
它适用于等待我只改变这个:

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

                 p.waitFor();

【问题讨论】:

  • 第二次重命名文件时遇到什么错误?你说“有时失败”,但你没有解释它是如何失败的。
  • @DanPuzey 有时文件根本不重命名没有错误

标签: java windows file rename


【解决方案1】:

我怀疑您正在尝试重命名正在使用的文件。

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

【讨论】:

  • 在这个例子中,什么是最好的使用 REN 或 waitFro ??
  • 我会做任何你认为更简单的事情。最有可能的是,我会使用 waitFor(),然后执行 renameTo()。如果这不是一个选项,您可以将其添加到脚本中。
猜你喜欢
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 2014-08-04
相关资源
最近更新 更多