2012-01-26 20 views
0

インターネットから入手したこのコードをJavaプログラムに入れますが、削除しようとすると元のファイルを削除できず、一時ファイルを元の名前に変更できません2つのファイルは内容が変更されていない状態でフォルダに残ります。java内のファイルを削除しても動作しません

...

public class FilingDatabase { 
    public static void main(String[]args)throws IOException{ 
     (new FilingDatabase()).run(); 
     FilingDatabase fd=new FilingDatabase(); 
     String word = null; 
     fd.delete("person.txt",word); 

     } 

public void run() throws IOException{ 
    File file=new File("person.txt"); 
    BufferedReader br=new BufferedReader(new FileReader(file)); 

    while((str=br.readLine())!=null) 
     i++; 

     System.out.print("\t\t\t\t\t\t***************WELCOME*****************"); 
     System.out.println(); 
     System.out.println("1. Add \n2. Edit \n3. Delete \n4. Exit"); 
     System.out.print("\nEnter option number: "); 
     option=in.next(); 

     while(true){ 
      ... 
      else if(option.charAt(0)=='3'){ 
       // FilingDatabase fd= new FilingDatabase(); 
       System.out.print("Enter word: "); 
       word=in.next(); 
       //delete("person.txt",word); 

      }   
      ... 
     } 
    }//end of fxn run() 

....

public void delete(String file, String lineToRemove) throws IOException{ 

     try { 
        File inFile = new File(file); 
        if (!inFile.isFile()){ 
        System.out.println("File does not exist"); 
        return; 
         } 
         File tempFile = new File(inFile.getAbsolutePath() + ".tmp"); 
         BufferedReader br = new BufferedReader(new FileReader(file)); 
         //Scanner br=new Scanner(file); 
         PrintWriter pw = new PrintWriter(new FileWriter(tempFile)); 

         String line = null; 

         while ((line = br.readLine()) != null) { 
         if (!line.trim().equals(lineToRemove)) { 

          pw.println(line); 
          pw.flush(); 
         } 
         } 


         pw.close(); 
         br.close(); 

         if (!inFile.delete()) { 
         System.out.println("Could not delete file"); 
         return; 
         } 
         if (!tempFile.renameTo(inFile)) 
         System.out.println("Could not rename file"); 

      }catch (FileNotFoundException e) { 
       e.printStackTrace(); 
       } 
    } 
} 
+0

同じ 'FillingDatabase'インスタンスを' run'と 'delete'(2つの差分インスタンスを作る代わりに)に使用してみませんか? – Jeffrey

+0

'fd.delete(" person。なぜあなたは単語のnull値を渡していますか? – RanRag

+0

@RanRag単語は、ユーザーの入力からベースにしようとしていたため、nullです。しかし、それでも動作しません。 – claire0us

答えて

2

私はあなたが削除しようとしている場所がわからないんだけど、あなたのメインの最後の行に:

fd.delete("person.txt",word); 

削除されませんObject.equals(null)は常にfalseを返す必要があります。 (wordnullです。)

あなたがループ内で削除しようとしている場合:

// FilingDatabase fd= new FilingDatabase(); 
System.out.print("Enter word: "); 
word=in.next(); 
//delete("person.txt",word); 

delete行がコメントアウトされているため、それは何も削除されません。

ファイルの削除と名前の変更については、私には分かりません。

2

私はあなたのコードの周りに頭を上げようとしていません...そして何をしようとしています。 (あなたはコメントを聞いたことがありますか?Javadocs?使用を検討しましたか?)deleterenameは多くの状況で失敗することがあります。 delete場合、これらは次のものがあります。対象のファイルが存在しない

  • ターゲットファイルが存在しないが、アプリケーションは、親ディレクトリにアクセスする権限を持っている、および/またはファイルを削除しません
  • ターゲットオブジェクトがディレクトリではない
  • (一部のプラットフォームでは)このアプリケーションまたは別のアプリケーションが現在開いているため、ターゲットファイルがロックされています。 renameの場合

、あなたはファイルの存在、アクセス権など名前に変更されている(とその親ディレクトリ)とあなたが移動しようとしているディレクトリを考慮する必要があります。また、異なるファイルシステム間で名前の変更が機能しないという問題もあります。


削除または名前の変更が失敗した理由(Fileクラス上の)これらのメソッドは言っていないことを残念です。 (新しいJava 7 Filesクラスのメソッドは...)これを行うことができたとしても、診断はOSのシステムコールが報告するものによって制限されます。 Unix/Linuxの場合、これはかなり制限されています。

+0

' File'メソッドは、なぜ失敗したのか、Java 7では対応する['Files'](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html)メソッドは( 'delete'と' move')します。 – Jeffrey

+0

@Jeffrey - 良い点 –

関連する問題