2011-12-23 55 views
1

這是一個簡單的類來顯示4種情況。 對不起,我的英語(不好)renameTo()不能在Eclipse中工作Helios

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存在嗎? true
toTemp_Dir存在嗎?真正
重命名失敗「德時間一個檔案館連接上級目錄」
重命名失敗「德檔案館連接上級目錄時間」
重命名成功的「德時間時間」
重命名成功的「德檔案館一個檔案館連接上級目錄」

本課程適用於某些PC,但不適用於其他PC(在7臺PC中測試,5個工作,2個不工作),所有安裝的都是ubuntu。

據說這是一個權限問題,但我已經將PC設置爲管理員和root用戶。

我用gksu和sudo嘗試過,但不起作用。

任何解決方案?

謝謝。

+0

可能重複:http://stackoverflow.com/questions/1000183/reliable-file-renameto-alternative-on-windows – DaveJohnston 2011-12-23 12:46:21

+0

我看到這個帖子了,但還沒有解決我的問題。 – 2011-12-23 12:55:24

回答

1

更改

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

,這是可以正常使用的renameTo()方法。

2

閱讀renameTo DOC:

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 

我有莫名其妙的問題,像你這樣做,但我有很多文件的工作,我有需要作出非常肯定的事情發生。解決的辦法是使用OS要做到這一點,調用 調用Runtime.getRuntime()。EXEC(命令)

而且裏面的命令,我可以做一個「MV」文件1文件2 聽起來很傻,但它做的工作。經常這樣做可能會相當昂貴,但它工作時沒有任何大問題。

乾杯, 尤金。

+0

你可以接受答案然後:-) – Eugene 2011-12-23 14:40:31

+0

這隻適用於Linux操作系統,但如果我想使用Windows操作系統不起作用。 我需要在Windows和Linux上工作。 – 2011-12-23 14:41:32

+0

那麼因爲Windows是..以及Windows和它使用一些奇怪的方式鎖定,你不能真正強制重命名。該文件可能是開放的,可能會被某些防病毒軟件,某些Windows索引器使用,無論如何,如果存在,您將無法重命名該文件。您可以實施重試,但這只是一個擺脫問題的奇特途徑。 – Eugene 2011-12-23 15:02:03