2011-12-23 4 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が存在しますか?真
名前の変更は、 'デ・時間的A archivoエンdirectorio'
に失敗 改名 'デarchivoエンdirectorio Aの時間' を失敗
成功した名前を変更し
'デは、時間的に、時間的' 成功 'デarchivo A archivoエンdirectorio'

の名前を変更します

このクラスは、一部のPCでは動作しますが、他のPC(7台のPCでテスト済み、5台のテスト済み、2台は動作していません)ではなく、すべてubuntuがインストールされています。

おそらく許可の問題ですが、管理者とrootとしてPCを設定しました。

私はgksuとsudoで試しましたが、うまくいきません。

ありがとうございました。

+0

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

+0

この投稿は既に見ましたが、私の問題は解決していません。 –

答えて

1

変更これは完全に働いている

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

ためrenameTo()方法。

2

が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の(コマンド)を呼び出し、それを行うためにOSを使用していた

とコマンド内で、私は何ができる「MV」FILE1 FILE2 は愚かに聞こえるが、それは仕事をしました。おそらくあまりにも頻繁にそれを行うには非常に高価ですが、それは大きな問題なしで働いた。

乾杯、 ユージン。

+0

あなたは答えを受け入れることができます:-) – Eugene

+0

これはLinux OSでのみ動作しますが、Windowsを使用したい場合はOSが動作しません。 私はWindowsとLinuxの両方で作業する必要があります。 –

+0

WindowsはよくWindowsなので、奇妙なロック方法を使用しているので、本当に名前を変更することはできません。ファイルは開いているかもしれませんし、何らかのウイルス対策ソフトやWindowsインデクサーで使用することもできますし、名前を変更することもできません。あなたは再試行を実装することができますが、それは問題から逃げるための素晴らしい方法です。 – Eugene