-2

ソースファイルをマージして削除する次のコードを書きましたが、どういうわけかソースファイルが削除されません。

    public void doDelete(List<String> dID)throws  IOException {

        String DID=null;

        try{
            for( ListIterator<String> iterator = dID.listIterator(); iterator.hasNext();)
            {

                DID= (String) iterator.next();

                System.out.println("Deleting PDF" +DID);
                File f =new File("E:\\TestFolder"+ "\\" +DID+".pdf");
                 if (!f.exists()) {
                        System.err.println("File " + f
                            + " not present to begin with!");
                        return;
                      }
                System.out.println(f.length());
                System.out.println(f.getAbsolutePath());
                boolean success = f.delete();
                if (!success){
                    System.out.println("Deletion failed.");               
                }else{
                    System.out.println("File deleted."+DID);
                }
            }
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();             
        }
    }   
}
4

2 に答える 2

2

TL;DR ですが、ファイルの削除に失敗するのは通常、ファイルがまだ開いていることが原因です。特にWindowsで実行しているため。削除の失敗の理由を取得したい場合は、代わりに Java 7 ファイル API を使用できます。例外として、削除の失敗の理由が示されます。

java.nio.Files.delete(...)

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#delete(java.nio.file.Path )

于 2012-05-09T08:18:15.220 に答える
0

createFileFromBlobメソッドでは、(dID.listIterator()の要素ごとに)複数のFileOutputStreamsを開いていますが、finallyブロックの最後の1つだけを閉じています。これにより、最後のファイル以外のすべてのファイルへのオープンハンドルが残り、パルサーの回答に従ってファイルが削除されるのを防ぎます。

于 2012-05-09T08:27:06.453 に答える