【问题标题】:renameTo() not work in eclipse HeliosrenameTo() 在日食 Helios 中不起作用
【发布时间】:2012-01-26 19:44:24
【问题描述】:

这是一个显示 4 个案例的简单类。 对不起我的英语(不好)

public static void main(String[] args) throws IOException {

    //TODO De temporal a archivo en directorio
    //TODO from file in temporary folder to file in common folder.
    File fromTemp_Dir = File.createTempFile("Temp_Dir_FROM", ".temp");
    File toTemp_Dir = new File ("Temp_Dir");        

    BufferedWriter bufferWriterTemp_DirFROM = new BufferedWriter(new FileWriter(fromTemp_Dir));
    bufferWriterTemp_DirFROM.write("Temp_Dir_FROM");
    bufferWriterTemp_DirFROM.close();

    BufferedWriter bufferWriterTemp_DirTO = new BufferedWriter(new FileWriter(toTemp_Dir));
    bufferWriterTemp_DirTO.write("Temp_Dir_TO");
    bufferWriterTemp_DirTO.close();

    System.out.println("fromTemp_Dir exist? "+fromTemp_Dir.exists());
    System.out.println("toTemp_Dir exist? "+toTemp_Dir.exists());


    toTemp_Dir.delete();
    if (!fromTemp_Dir.renameTo(toTemp_Dir)){
        System.out.println("rename fail 'De temporal a archivo en directorio'");
    }else {
        System.out.println("Rename successful 'De temporal a archivo en directorio'");
    } 


    //TODO De archivo a temporal
    //TODO from file in common folder to file in temporary folder.
    File fromDir_Temp = new File ("Dir_FROM");
    File toDir_Temp = File.createTempFile("Dir_Temp_TO", ".temp");

    BufferedWriter bufferWriterDir_TempFROM = new BufferedWriter(new FileWriter(fromDir_Temp));
    bufferWriterDir_TempFROM.write("Dir_Temp_FROM");
    bufferWriterDir_TempFROM.close();

    BufferedWriter bufferWriterDir_TempTO = new BufferedWriter(new FileWriter(toDir_Temp));
    bufferWriterDir_TempTO.write("Dir_Temp_TO");
    bufferWriterDir_TempTO.close();

    toDir_Temp.delete();
    if (!fromDir_Temp.renameTo(toDir_Temp)){
        System.out.println("rename fail 'De archivo en directorio a temporal'");
    } else{
        System.out.println("rename successful 'De archivo en directorio a temporal'");
    }


    //TODO De temporal a temporal
    //TODO from temporary folder to temporary folder
    File fromTemp = File.createTempFile("archivoTempFROM_", ".temp");
    File toTemp = File.createTempFile("archivoTempTO_", ".temp");

    BufferedWriter bufferWriterFROMTemp = new BufferedWriter(new FileWriter(fromTemp));
    bufferWriterFROMTemp.write("archivoTempFROM");
    bufferWriterFROMTemp.close();

    BufferedWriter bufferWriterTOTemp = new BufferedWriter(new FileWriter(toTemp));
    bufferWriterTOTemp.write("archivoTempTO");
    bufferWriterTOTemp.close();

    toTemp.delete();
    if (!fromTemp.renameTo(toTemp)){
        System.out.println("rename fail 'De temporal a temporal'");
    }else {
        System.out.println("Rename successful 'De temporal a temporal'");
    } 

    //TODO De archivo a archivo en directorio
    //TODO from file in common directory to file in common directory 
    File fromDir = new File("archivoDirFROM");
    File toDir = new File("archivoDirTO");

    BufferedWriter bufferWriterFROMDir = new BufferedWriter(new FileWriter(fromDir));
    bufferWriterFROMDir.write("archivoDirFROM");
    bufferWriterFROMDir.close();

    BufferedWriter bufferWriterTODir = new BufferedWriter(new FileWriter(toDir));
    bufferWriterTODir.write("archivoDirTO");
    bufferWriterTODir.close();

    toDir.delete();
    if (!fromDir.renameTo(toDir)){
        System.out.println("rename fail 'De archivo a archivo en directorio'");
    }else {
        System.out.println("Rename successful 'De archivo a archivo en directorio'");
    } 

}

在我的控制台中显示

fromTemp_Dir 存在吗?真的
toTemp_Dir 存在吗?真的
重命名失败 'De temporal a archivo endirectio'
重命名失败“De archivo endirectio a temporal”
重命名成功的“De temporal a temporal”
重命名成功的“De archivo a archivo en directory”

这个类在一些电脑上工作,但在其他电脑上不工作(在 7 台电脑上测试,5 台工作,2 台不工作),全部安装了 ubuntu。

据说是权限问题,但我已将PC设置为管理员和root。

我尝试使用 gksu 和 sudo,但不起作用。

有什么办法吗?

谢谢。

【问题讨论】:

标签: java eclipse temporary-files


【解决方案1】:

阅读 renameTo 文档:

Whether or not this method can move a file from one filesystem to another is platform-dependent. The return value should always be checked to make sure that the rename operation was successful

我遇到了和你一样的问题,但我必须处理很多文件,而且我需要确保事情发生。解决方案是使用操作系统来做到这一点,调用 Runtime.getRuntime().exec(命令)

在命令里面我可以做一个“mv”file1 file2 听起来很傻,但它确实完成了工作。经常这样做可能会非常昂贵,但它可以正常工作。

干杯, 尤金。

【讨论】:

  • 这仅适用于 linux 操作系统,但如果我想使用 windows 操作系统则不起作用。我需要同时在 Windows 和 Linux 上工作。
  • 好吧,因为 Windows 是......好吧,Windows 并且它使用了一些奇怪的锁定方式,你不能真正强制重命名。该文件可能是打开的,可能被某些防病毒软件、某些 Windows 索引器使用,如果是,您将无法重命名它。您可以实施重试,但这只是逃避问题的一种奇特方式。
  • 我必须进一步研究如何解决这个该死的问题。无论如何,谢谢。
【解决方案2】:

renameTo()方法更改为

Files.move(new File(newFilePath), new File(oldFilePath));

这是完美的工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多