Просмотр исходного кода

Merge pull request #25 from overleaf/delete-temporary-files

Delete temporary files created by Tar on close
John Lees-Miller 9 лет назад
Родитель
Сommit
8e15d63a2f

+ 41 - 0
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/DeletingFileInputStream.java

@@ -0,0 +1,41 @@
+package uk.ac.ic.wlgitbridge.util;
+
+import java.io.*;
+
+/**
+ * A {@link java.io.FileInputStream} which deletes the underlying
+ * {@link java.io.File} on close.
+ *
+ * @author Michael Walker (barrucadu) {@literal <mike@barrucadu.co.uk>}
+ */
+public class DeletingFileInputStream extends FileInputStream {
+    private File file;
+
+    /**
+     * Creates a {@link java.io.FileInputStream} by opening a
+     * connection to an actual file, the file named by the
+     * {@link java.io.File} object file in the file system.
+     *
+     * When the {@link close} method is called, the {@code File} will
+     * be deleted.
+     */
+    public DeletingFileInputStream(File file) throws FileNotFoundException {
+        super(file);
+        this.file = file;
+    }
+
+    /**
+     * Closes this input stream and deletes the underlying file.
+     */
+    @Override
+    public void close() throws IOException {
+        try {
+            super.close();
+        } finally {
+            if(file != null) {
+                file.delete();
+                file = null;
+            }
+        }
+    }
+}

+ 1 - 1
services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java

@@ -46,7 +46,7 @@ public class Tar {
             if (sizePtr != null) {
                 sizePtr[0] = tmp.length();
             }
-            return new FileInputStream(tmp);
+            return new DeletingFileInputStream(tmp);
         }
 
         public static void unzip(