對於我的應用程序,我必須編寫一個方法,它將InputStream
作爲參數,將內容寫入臨時文件,執行一些操作並最終刪除臨時文件。在資源嘗試中處理臨時文件
這是我到目前爲止有:
public void myMethod(InputStream in, String name) {
//...
Path path = Paths.get("./tmp/benchmarks/" + name + ".zip")
try {
Files.copy(in, path);
//operations...
} catch (IOException e) {
//error handling for copy...
} finally {
try {
Files.delete(path));
} catch (IOException e) {
//error handling for delete...
}
}
//...
}
它的工作,但它也看起來非常難看。我想知道是否有某種方式可以使用try-with-resources
來更好地處理這個問題。 它可能以某種方式?
更新:我在十分鐘內寫了一個即時解決方案。它看起來像這樣:
public class TemporaryFileHandler implements AutoCloseable {
private File file;
public TemporaryFileHandler(final InputStream in, final Path path) throws IOException {
Files.copy(in, path);
this.file = new File(path.toString());
}
public File getFile() { return file; }
@Override
public void close() throws IOException {
Files.delete(file.toPath());
}
}
我相信這不是最好的,但它現在做的工作。如果任何人有任何建議,以任何方式改善這一點,建議是非常值得歡迎的。
你知道'Files.createTempFile'嗎? – 2015-12-02 17:40:51
@RC。是的,但使用它意味着該文件將在JVM關閉時被刪除。理想情況下,我的JVM不應該關閉(我正在開發一個REST API)。 – link
沒有嘗試,但類似'try(InputStream in = Files.newInputStream(tempFile,StandardOpenOption.DELETE_ON_CLOSE))'可以爲你工作。適用於流,因此可能不如基於文件的方便。 – zapl