2017-12-01 22 views
0

私は、ディレクトリ/ファイルのリストをダウンロードし、一時Tempディレクトリ(%LocalAppData%/Temp/のディレクトリ)に保存するJava 8アプリケーションを開発中です。すべてのダウンロードの後、XMLファイルが生成され、テキストとしてデータベースに保存されます。FileUtilsを使用してtempフォルダを削除できません

Tempディレクトリを使用して作成されます。私のJUnitテストで

Path packageTargetDirectory = java.nio.file.Files.createTempDirectory("packages");

を、私は機能をテストします。できます。だから、テストの後、私はテストコードを使って、コンテンツを再帰的にディレクトリを削除したい(org.apache.commons.io.FileUtils.deleteDirectory()メソッドを使用して)。

このメソッドは、@After注釈で注釈が付けられたテスト関数で呼び出されます。メソッドを呼び出して、コードをテストする場合、私はIOExceptionを得る:

java.io.IOException: Unable to delete directory C:\Users\martin\AppData\Local\Temp\packages3096883734780765073\WindowsAzure.Storage

私はディレクトリになった、とだけテストを実行した後に、それを削除しようとしました:私はそれを自分自身を削除することができます。私は多くのことを試みました。私はorg.apache.commons.io.FileUtils.forceDelete()メソッドを試しました。私はまた、削除の次のコードを試してみました:

Files.walkFileTree(testDataDirectory, new SimpleFileVisitor<Path>() { 
     @Override 
     public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { 
      Files.delete(file); 
      return FileVisitResult.CONTINUE; 
     } 

     @Override 
     public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { 
      Files.delete(dir); 
      return FileVisitResult.CONTINUE; 
     } 
    }); 

すべては、ディレクトリ構造を削除することに失敗しました。内容が削除されたようです。

一時フォルダ内のディレクトリを削除できないという問題がありますか?私は開かれた流れを考えていたが、私はそれらのすべてを閉じたようだ。

答えて

0

なぜJUnitの既存の機能を使用しないのですか? Javaのドキュメントからコピー

TemporaryFolderルールは、(それが成功したか失敗したか)試験法の終了を削除する必要があるファイルとフォルダを作成することができます。削除が成功するかどうかは、このルールではチェックされません。削除が失敗した場合に例外はスローされません。

@Rule 
    public TemporaryFolder folder= new TemporaryFolder(); 

    @Test 
    public void testUsingTempFolder() throws IOException { 
     File createdFile= folder.newFile("myfile.txt"); 
     File createdFolder= folder.newFolder("subfolder"); 
     // ... 
    } 
+0

フォルダーの作成はテストコードではなく、他のコードで行われるためです。 – Martin

+0

*通常の*コードでは、ファイルをダウンロードし、一時ディレクトリに保存します。コードによってはファイルが生成されます。その特定のファイルにPathインスタンスを返します。ファイルの親(削除するディレクトリ)を取得します。 – Martin

+0

ファイルをダウンロードするディレクトリを変更できますか? JUnitから最終的に1つを使用します。これにより間違いなくより良いテストが可能になります。 – Admit

関連する問題