Fix potential issues related to CFG printing

This CL addresses 2 complaints from FindBugs related to close of
resources and charset encoding.

The 1st issue is about the writer not being closed if an exception
happens during the write operation. This is addressed by the usage
of a try-with-resources.

The 2nd issue is about relying on the platform's default encoding
(executing the program). This is addressed by explicitly setting the
charset to UTF-8 (which requires to use a different API).

Change-Id: Iad5070e1b3a13d259b7ab7ebc28e3303fa2aabdf
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 3c408cb..6d405b5 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -17,7 +17,10 @@
 import com.android.tools.r8.utils.InternalOptions;
 import com.android.tools.r8.utils.ThreadUtils;
 import com.android.tools.r8.utils.Timing;
+import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.FileAlreadyExistsException;
 import java.nio.file.NoSuchFileException;
 import java.nio.file.Paths;
@@ -202,9 +205,11 @@
       if (options.printCfgFile == null || options.printCfgFile.isEmpty()) {
         System.out.print(printer.toString());
       } else {
-        java.io.FileWriter writer = new java.io.FileWriter(options.printCfgFile);
-        writer.write(printer.toString());
-        writer.close();
+        try (OutputStreamWriter writer = new OutputStreamWriter(
+            new FileOutputStream(options.printCfgFile),
+            StandardCharsets.UTF_8)) {
+          writer.write(printer.toString());
+        }
       }
     }
     return application;
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 6216b8f..dc13143 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -44,9 +44,12 @@
 import com.google.common.io.ByteStreams;
 import com.google.common.io.Closer;
 import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.io.PrintStream;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.FileAlreadyExistsException;
 import java.nio.file.Files;
 import java.nio.file.NoSuchFileException;
@@ -122,9 +125,11 @@
       if (options.printCfgFile == null || options.printCfgFile.isEmpty()) {
         System.out.print(printer.toString());
       } else {
-        java.io.FileWriter writer = new java.io.FileWriter(options.printCfgFile);
-        writer.write(printer.toString());
-        writer.close();
+        try (OutputStreamWriter writer = new OutputStreamWriter(
+            new FileOutputStream(options.printCfgFile),
+            StandardCharsets.UTF_8)) {
+          writer.write(printer.toString());
+        }
       }
     }
     return application;