2012-04-14 18 views
0

Javaプログラミングでファイルを削除して名前を変更する際に助けが必要です。私の問題は、元のファイルを削除することはできませんし、2番目のファイルの名前を変更することはできません。ここにスニペットコードを示します。どんな提案もありがとうございます。Javaプログラミングでのファイルの削除と名前の変更

import java.awt.event.*; 
import java.io.*; 
import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.*; 




public void deleteLine(String content) { 
    try { 

     File inFile = new File("football.dat"); 
     if (!inFile.isFile()) { 
      System.out.println("Parameter is not an existing file"); 
      return; 
     } 
     File tempFile = new File(inFile.getAbsolutePath() + "2"); 
     BufferedReader br = new BufferedReader(new FileReader(inFile)); 
     PrintWriter pw = new PrintWriter(new FileWriter(tempFile), true); 

     String linetobeempty = null; 
     while ((linetobeempty = br.readLine()) != null) { 

      if (!linetobeempty.trim().equals(content)) { 
       pw.println(linetobeempty); 
       pw.flush(); System.out.println(linetobeempty); 
      } 
     } 

     pw.close();   
     br.close(); 
     boolean b = inFile.delete(); 

     if (!b) { 
      System.out.println("Could not delete file"); 
      return; 
     } 

     //Rename the new file to the filename the original file had. 
     if (!tempFile.renameTo(inFile)) { 
      System.out.println("Could not rename file"); 
     } 


    } catch (FileNotFoundException ex) { 
     ex.printStackTrace(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
} 
+0

どういうところですか? –

+0

エラーとは何ですか? – Spoike

+0

一時ファイルを作成するには、 'File.createTempFile(文字列接頭辞、文字列接尾辞、ファイルディレクトリ)を使用する必要があります。書かれた行のたびに 'pw.flush();'を呼び出す必要はありません。通常、close()の前に呼び出すだけで十分です。ストリームをクローズし、クローズをfinallyブロックに入れてください。そうしないと、ファイルを削除または削除できないことがあります。たとえば、 'try {...} ffinally {close(pw); close(br);} 'closeは静的メソッドで、' static void close(Reader r){if(r!= null)try {r.close();}のようになります。 } catch(Exception e){// log}} ' – andih

答えて

1

このコードスニペットには、削除されないファイルの直接の原因となるものはありません。問題は、他のプロセス、通常のものによって開く、より深いダウンパーミッションです。すべてをチェックしてください。もちろん、削除の失敗後に名前の変更が失敗する理由は明らかです。現在、あなたは知っている問題が1つだけです。

1

Windowsを使用していますか? Windows上では、UNIX上とは異なり、いずれかのプロセスがそのファイルにファイルハンドルを持っていると、unlinkとrenameが失敗します。私は、OSにJavaのファイルI/Oテストを行うときにファイルの書き込みと削除を中断する必要があることに気づいたことがあります。 renameTo and deleteの文書は、いくつかの限られた見識を示しています。

問題を簡素化してデバッグを改善するには、File.createNewFile()を使用してファイルを作成するのではなく、作成してください。

可能性として、Cannot delete file Javaと同じ問題があります。

関連する問題