0

私のjavaアプリケーションでは、指定されたディレクトリのファイルFilenameFilterを取得するために使用しています。zip私のディレクトリ構造は次のようになります。

D\:\MyFiles\data\dir1
D\:\MyFiles\data\dir2
D\:\MyFiles\data\dir3
D\:\MyFiles\data\dir4

zipファイルはdirフォルダにあります。私はD\\:\\MyFiles\\data自分のプログラムだけに与えています、そしてそれはフォルダを見つけるのはdir使用で始まりFilenameFilter、そしてファイルを見つけるのzipdirフォルダで終わります。

内部では、ファイルごとにオブジェクトをfor loop作成し、それらを削除するために呼び出していますが、それらは削除されません。new Filezipdelete()

getPath()メソッドを使用してファイルパスを印刷しました。出力は以下のようになります。

D\:\MyFiles\data\dir1\a.zip
D\:\MyFiles\data\dir1\b.zip
D\:\MyFiles\data\dir2\b1.zip
D\:\MyFiles\data\dir3\d.zip

File次に、としてオブジェクトを手動で作成し、File f = new File("D/:/MyFiles/data/dir1/a.zip")削除しようとしました。成功しました。

ファイルを削除するにはどうすればよいですか?どうすれば正しいパスを指定できますか?

更新

これは私が使用しているコードです:

// this contains folders start with 'dir' in 'D:\MyFiles\data\'
    Vector<String> dirList = utl.identifyDir(conf);

File dir;
for (int i = 0; i < dirList.size(); i++) {

// in my properties file ITEM_FOLDER is written as ITEM_FOLDER=D\:\\MyFiles\\data
//  LOG.fine(conf.readConfig(Configuration.ITEM_FOLDER)); returns D:\MyFiles\data

    dir = new File(conf.readConfig(Configuration.ITEM_FOLDER)
            + File.separator + dirList.get(i));

    // this contains all the files ends with 'zip' in 'dir' folders in 'D:\MyFiles\data\'
    Vector<String> zipFiles = utl.identifyZipFiles(dir);

    for (int x = 0; x < zipFiles.size(); x++) {

        /* delete */

        File sourcePath = new File(
                conf.readConfig(Configuration.ITEM_FOLDER)
                        + File.separator + dirList.get(i)
                        + File.separator + zipFiles.get(x));

            boolean sp = sourcePath.delete();

            LOG.fine("sourcePath : " + sourcePath.getPath() + " : "
                    + sp);

                // one of LOG prints is D:\MyFiles\data\dir3\d.zip : false



    }
}           
4

2 に答える 2

1

あなたのアップデートを読んだ後、私はここで起こっている可能性のある2つのことがあると思います。

  1. あなたはまだあなたのアプリケーションで何かを開いています。FileInputStreamなどを使用していませんか?

  2. 別のプロセスは、.zipをビジー状態に保つことです。そのファイルを開きましたか?エクスプローラウィンドウなどを閉じてみてください。

編集:他のユーザーからのチェックリスト:

  • パスが正しいことを確認してください。たとえば、何がfile.exists()返されますか?
  • アプリケーションを実行しているユーザーとしてファイルを削除する権限があることを確認してください
  • コード内のファイルへのオープンハンドルがないことを確認します(たとえば、ファイルから読み取っただけで、入力ストリームを閉じていませんか?)
  • デスクトップアプリでファイルを開いていないことを確認してください
于 2013-02-15T11:19:38.333 に答える
0

テストする新しいファイルオブジェクトを作成する場合、を使用する場合とは何かが異なりますgetPath。パス名のすべてのスラッシュが/ではなく\であることに注意してください。

于 2013-02-15T10:52:11.903 に答える