From 5e8d5b889f00bb8e73b140bc4f2751a378d4c8d2 Mon Sep 17 00:00:00 2001 From: Alex Ott Date: Sun, 4 Aug 2013 19:14:44 +0200 Subject: [PATCH] refactor the code, close file even if the exception is thrown --- modules/incanter-io/src/incanter/io.clj | 31 ++++++++++++------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/modules/incanter-io/src/incanter/io.clj b/modules/incanter-io/src/incanter/io.clj index e16c16c4..d225276c 100644 --- a/modules/incanter-io/src/incanter/io.clj +++ b/modules/incanter-io/src/incanter/io.clj @@ -89,14 +89,12 @@ parsed-data))))))) - - (defmethod save incanter.Matrix [mat filename & {:keys [delim header append] :or {append false delim \,}}] (let [file-writer (if (= "-" filename) *out* (java.io.FileWriter. filename append))] - (do + (try (when (and header (not append)) (.write file-writer (str (first header))) (doseq [column-name (rest header)] @@ -110,11 +108,10 @@ (doseq [column (rest row)] (.write file-writer (str delim column))) (.write file-writer (str \newline))))) - (.flush file-writer) - (.close file-writer)))) - - - + (finally + (.flush file-writer) + (when (= "-" filename) + (.close file-writer)))))) (defmethod save :incanter.core/dataset [dataset filename & {:keys [delim header append] :or {append false delim \,}}] @@ -124,20 +121,22 @@ (java.io.FileWriter. filename append)) rows (:rows dataset) columns (:column-names dataset)] - (do + (try (when (and header (not append)) (.write file-writer (str (first header))) (doseq [column-name (rest header)] (.write file-writer (str delim column-name))) (.write file-writer (str \newline))) (doseq [row rows] - (do - (.write file-writer (str (row (first columns)))) - (doseq [column-name (rest columns)] - (.write file-writer (str delim (row column-name)))) - (.write file-writer (str \newline)))) - (.flush file-writer) - (.close file-writer)))) + (do + (.write file-writer (str (row (first columns)))) + (doseq [column-name (rest columns)] + (.write file-writer (str delim (row column-name)))) + (.write file-writer (str \newline)))) + (finally + (.flush file-writer) + (when (= "-" filename) + (.close file-writer)))))) (defmethod save java.awt.image.BufferedImage