2017-02-08 9 views
0

Java Windowsアプリケーションは、特定の問題のデータを、同じ名前のディレクトリ(フォルダ)にあるファイルaProblem.dbに保持します(例:Documents \ MyApplication \ aProblem \ aProblem)。 db。私は、ユーザーがアプリケーションを終了せずに問題を削除できるようにしたいと思います。したがって、aProblem.dbファイルは削除する必要があり、aProblemディレクトリも空のままにしておくと削除する必要があります。 FileChooserはファイルの削除を許可していないので(少なくとも私のドキュメントを読んでから)、選択ボックスとOkボタンとCancelボタンで自分のダイアログを作成しました。選択ボックスには、ファイルx.dbを含むすべてのディレクトリxに対してMyApplicationを検索することによって入力されます。ファイルの削除と親ディレクトリの削除

次のコードは、ユーザーが選択して[OK]をクリックした後の削除部分です。これは、ディレクトリの削除が試行されたときに例外がスローされたときに、Windowsエクスプローラでディレクトリが開いている場合を除いて機能します。私はそれがエクスプローラにロックされているので、私はそれを知っているが、私はエクスプローラでそれを閉じて、もう一度やり直すようにユーザーに尋ねることを避けたいと思います。これは可能ですか?

注:JFileChooser.APPROVE_OPTIONを使用しますが、JFileShooserは使用しないでください。

  int resp = dialog.showOpenDialog(); 
     if(resp == JFileChooser.APPROVE_OPTION){ 
      strConcoursFolderPath = dialog.getSelectedFolderFullPath(); 
      int response = yesNoDialog("Do you really want to delete " + strConcoursFolderPath + "?"); 
      if(response == JOptionPane.YES_OPTION) { 
       File dir = new File(strConcoursFolderPath); 
       boolean dirExist = dir.exists() && dir.isDirectory(); 
       if(dirExist) { 
        String strDbFile = dialog.getSelectedFolderName() + ".db"; 
        File db = new File(dir + "\\" + strDbFile); 
        if(db.exists()) db.delete(); 
        File[] listOfFiles = dir.listFiles(); 
        if(listOfFiles.length == 0) dir.delete(); 
       } 
      } 

     } else { 
      //okDialog("Cancel button clicked"); 
     } 
+1

の可能性のある重複[削除は、Javaでファイルをロック?](http://stackoverflow.com/questions/2885406/deleting-locked-files-with-java) –

答えて

0

テンプレートとして使用できる疑似コードを書きました。

File directory = new File(/* current directory you are viewing files in JFileChooser */); 

    if (directory.exists()) { 

     //List our content within this directory. 
     File[] files = directory.listFiles(); 

     //Select file to delete. 

     //If contents is empty it'll delete the directory. 
     if (files.length == 1) { 
      directory.delete(); 
     } 
    } 

これは、投稿に記載されている内容に基づいて行う必要があります。ファイルの内容が1であるかどうかを確認するのは、ファイルの削除時にファイル&のファイルを削除するシナリオにいたことがないことを意味します。そのため、ディレクトリ内の最後のファイルかどうかを確認し、最後のファイルを削除するときにディレクトリを削除します。

+0

おかげで、私はそれが私の問題にどのように適用されたのか理解できませんでした。おそらく私はそれをとてもうまく説明しなかったからです。しかし、あなたが見ているように、 "問題"はとにかく存在しませんでした! –

+0

@EdS私の謝罪、私はそれをすべて正しく解釈していないと思います。 – Simplemind

0

「これは本当に起こったことはありません。無関係のバグがあり、修正されたときに問題を複製できませんでした。 IOW、監督がエクスプローラで開いているかどうかにかかわらず、私のコードはうまく動作します。

申し訳

エド

関連する問題