diff --git a/src/com/facebook/buck/android/MergeAndroidResourcesStep.java b/src/com/facebook/buck/android/MergeAndroidResourcesStep.java
index 09bd64a..d3b6655 100644
--- a/src/com/facebook/buck/android/MergeAndroidResourcesStep.java
+++ b/src/com/facebook/buck/android/MergeAndroidResourcesStep.java
@@ -24,14 +24,12 @@
 import com.google.common.base.Joiner;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
 import com.google.common.collect.ComparisonChain;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSortedSet;
 import com.google.common.collect.SortedSetMultimap;
 import com.google.common.collect.TreeMultimap;
 import com.google.common.io.CharStreams;
-import com.google.common.io.Closer;
 import com.google.common.io.Files;
 
 import java.io.BufferedWriter;
@@ -199,19 +197,12 @@
   public static String generateJavaCodeForPackageAndResources(String packageName,
       SortedSet<Resource> resources) {
     StringBuilder b = new StringBuilder();
-    Closer closer = Closer.create();
-    PrintWriter writer = closer.register(new PrintWriter(CharStreams.asWriter(b)));
-    try {
+
+    try (PrintWriter writer = new PrintWriter(CharStreams.asWriter(b))) {
       writeJavaCodeForPackageAndResources(writer, packageName, resources);
     } catch (IOException e) {
       // Impossible.
       throw new RuntimeException(e);
-    } finally {
-      try {
-        closer.close();
-      } catch (IOException e) {
-        Throwables.propagate(e);
-      }
     }
     return b.toString();
   }
diff --git a/src/com/facebook/buck/java/JarDirectoryStep.java b/src/com/facebook/buck/java/JarDirectoryStep.java
index 0d7794f..28e09c2 100644
--- a/src/com/facebook/buck/java/JarDirectoryStep.java
+++ b/src/com/facebook/buck/java/JarDirectoryStep.java
@@ -32,7 +32,6 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import com.google.common.io.ByteStreams;
-import com.google.common.io.Closer;
 import com.google.common.io.Files;
 
 import java.io.ByteArrayInputStream;
@@ -228,16 +227,13 @@
   }
 
   private Manifest readManifest(ZipFile zip, ZipEntry manifestMfEntry) throws IOException {
-    Closer closer = Closer.create();
-    ByteArrayOutputStream output = closer.register(
-        new ByteArrayOutputStream((int) manifestMfEntry.getSize()));
-    InputStream stream = closer.register(zip.getInputStream(manifestMfEntry));
-    try {
+    try (
+        ByteArrayOutputStream output = new ByteArrayOutputStream((int) manifestMfEntry.getSize());
+        InputStream stream = zip.getInputStream(manifestMfEntry);
+    ) {
       ByteStreams.copy(stream, output);
       ByteArrayInputStream rawManifest = new ByteArrayInputStream(output.toByteArray());
       return new Manifest(rawManifest);
-    } finally {
-      closer.close();
     }
   }
 
diff --git a/src/com/facebook/buck/zip/ZipDirectoryWithMaxDeflateStep.java b/src/com/facebook/buck/zip/ZipDirectoryWithMaxDeflateStep.java
index 1aa9ffa..ba42bad 100644
--- a/src/com/facebook/buck/zip/ZipDirectoryWithMaxDeflateStep.java
+++ b/src/com/facebook/buck/zip/ZipDirectoryWithMaxDeflateStep.java
@@ -18,18 +18,14 @@
 import com.facebook.buck.step.ExecutionContext;
 import com.facebook.buck.step.Step;
 import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.hash.HashCode;
 import com.google.common.hash.Hashing;
 import com.google.common.io.ByteStreams;
-import com.google.common.io.Closer;
 import com.google.common.io.Files;
 
-import java.io.BufferedOutputStream;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.Map;
 import java.util.Set;
@@ -80,32 +76,25 @@
         "%s must be a directory.",
         inputDirectoryPath);
 
-    Closer closer = Closer.create();
     try {
       ImmutableMap.Builder<File, ZipEntry> zipEntriesBuilder = ImmutableMap.builder();
       addDirectoryToZipEntryList(inputDirectory, "", zipEntriesBuilder);
       ImmutableMap<File, ZipEntry> zipEntries = zipEntriesBuilder.build();
 
       if (!zipEntries.isEmpty()) {
-        CustomZipOutputStream outputStream = closer.register(
-            ZipOutputStreams.newOutputStream(new BufferedOutputStream(
-                new FileOutputStream(outputZipPath))));
-
-        for (Map.Entry<File, ZipEntry> zipEntry : zipEntries.entrySet()) {
-          outputStream.putNextEntry(zipEntry.getValue());
-          ByteStreams.copy(Files.newInputStreamSupplier(zipEntry.getKey()), outputStream);
-          outputStream.closeEntry();
+        try (CustomZipOutputStream outputStream =
+                 ZipOutputStreams.newOutputStream(new File(outputZipPath))
+        ) {
+          for (Map.Entry<File, ZipEntry> zipEntry : zipEntries.entrySet()) {
+            outputStream.putNextEntry(zipEntry.getValue());
+            ByteStreams.copy(Files.newInputStreamSupplier(zipEntry.getKey()), outputStream);
+            outputStream.closeEntry();
+          }
         }
       }
     } catch (IOException e) {
       e.printStackTrace(context.getStdErr());
       return 1;
-    } finally {
-      try {
-        closer.close();
-      } catch (IOException e) {
-        Throwables.propagate(e);
-      }
     }
     return 0;
   }
