6764062: Revise usage of java.io.*.close
authormchung
Fri, 05 Dec 2008 10:28:15 -0800
changeset 1694 3fae9f25fa1e
parent 1693 f99cde90680f
child 1695 bd4de543a439
6764062: Revise usage of java.io.*.close Summary: Handle closing multiple open I/O streams in case close() throws IOException Reviewed-by: ksrini
jdk/src/share/classes/com/sun/servicetag/Installer.java
jdk/src/share/classes/com/sun/servicetag/SunConnection.java
jdk/src/share/classes/com/sun/servicetag/Util.java
jdk/src/share/classes/com/sun/servicetag/WindowsSystemEnvironment.java
--- a/jdk/src/share/classes/com/sun/servicetag/Installer.java	Thu Dec 04 17:58:10 2008 +0100
+++ b/jdk/src/share/classes/com/sun/servicetag/Installer.java	Fri Dec 05 10:28:15 2008 -0800
@@ -475,7 +475,7 @@
 
         String filename = "/com/sun/servicetag/resources/javase_" +
                 version + "_swordfish.properties";
-        InputStream in = Installer.class.getClass().getResourceAsStream(filename);
+        InputStream in = Installer.class.getResourceAsStream(filename);
         if (in == null) {
             return null;
         }
@@ -813,7 +813,7 @@
                                    locale,
                                    String.valueOf(version)).toString();
             try {
-                in = Installer.class.getClass().getResourceAsStream(resource + ".html");
+                in = Installer.class.getResourceAsStream(resource + ".html");
                 if (in == null) {
                     // if the resource file is missing
                     if (isVerbose()) {
@@ -825,34 +825,39 @@
                     System.out.println("Generating " + f + " from " + resource + ".html");
                 }
 
-                br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
-                pw = new PrintWriter(f, "UTF-8");
-                String line = null;
-                while ((line = br.readLine()) != null) {
-                    String output = line;
-                    if (line.contains(JDK_VERSION_KEY)) {
-                        output = line.replace(JDK_VERSION_KEY, jdkVersion);
-                    } else if (line.contains(JDK_HEADER_PNG_KEY)) {
-                        output = line.replace(JDK_HEADER_PNG_KEY, headerImageSrc);
-                    } else if (line.contains(REGISTRATION_URL_KEY)) {
-                        output = line.replace(REGISTRATION_URL_KEY, registerURL);
-                    } else if (line.contains(REGISTRATION_PAYLOAD_KEY)) {
-                        output = line.replace(REGISTRATION_PAYLOAD_KEY, payload.toString());
+                try {
+                    br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
+                    pw = new PrintWriter(f, "UTF-8");
+                    String line = null;
+                    while ((line = br.readLine()) != null) {
+                        String output = line;
+                        if (line.contains(JDK_VERSION_KEY)) {
+                            output = line.replace(JDK_VERSION_KEY, jdkVersion);
+                        } else if (line.contains(JDK_HEADER_PNG_KEY)) {
+                            output = line.replace(JDK_HEADER_PNG_KEY, headerImageSrc);
+                        } else if (line.contains(REGISTRATION_URL_KEY)) {
+                            output = line.replace(REGISTRATION_URL_KEY, registerURL);
+                        } else if (line.contains(REGISTRATION_PAYLOAD_KEY)) {
+                            output = line.replace(REGISTRATION_PAYLOAD_KEY, payload.toString());
+                        }
+                        pw.println(output);
                     }
-                    pw.println(output);
+                    f.setReadOnly();
+                    pw.flush();
+                } finally {
+                    // It's safe for this finally block to have two close statements
+                    // consecutively as PrintWriter.close doesn't throw IOException.
+                    if (pw != null) {
+                        pw.close();
+                    }
+                    if (br!= null) {
+                        br.close();
+                    }
                 }
-                f.setReadOnly();
-                pw.flush();
             } finally {
-                if (pw != null) {
-                    pw.close();
-                }
                 if (in != null) {
                     in.close();
                 }
-                if (br!= null) {
-                    br.close();
-                }
             }
         }
     }
--- a/jdk/src/share/classes/com/sun/servicetag/SunConnection.java	Thu Dec 04 17:58:10 2008 +0100
+++ b/jdk/src/share/classes/com/sun/servicetag/SunConnection.java	Fri Dec 05 10:28:15 2008 -0800
@@ -213,10 +213,16 @@
             con.setRequestProperty("Content-Type", "text/xml;charset=\"utf-8\"");
             con.connect();
 
-            OutputStream out = con.getOutputStream();
-            registration.storeToXML(out);
-            out.flush();
-            out.close();
+            OutputStream out = null;
+            try {
+                out = con.getOutputStream();
+                registration.storeToXML(out);
+                out.flush();
+            } finally {
+                if (out != null) {
+                    out.close();
+                }
+            }
 
             int returnCode = con.getResponseCode();
             if (Util.isVerbose()) {
--- a/jdk/src/share/classes/com/sun/servicetag/Util.java	Thu Dec 04 17:58:10 2008 +0100
+++ b/jdk/src/share/classes/com/sun/servicetag/Util.java	Fri Dec 05 10:28:15 2008 -0800
@@ -140,11 +140,14 @@
             }
             return e.getMessage();
         } finally {
-            if (r != null) {
-                r.close();
-            }
-            if (err != null) {
-                err.close();
+            try {
+                if (r != null) {
+                    r.close();
+                }
+            } finally {
+                if (err != null) {
+                    err.close();
+                }
             }
         }
     }
--- a/jdk/src/share/classes/com/sun/servicetag/WindowsSystemEnvironment.java	Thu Dec 04 17:58:10 2008 +0100
+++ b/jdk/src/share/classes/com/sun/servicetag/WindowsSystemEnvironment.java	Fri Dec 05 10:28:15 2008 -0800
@@ -107,11 +107,17 @@
             Process p = pb.start();
             // need this for executing windows commands (at least
             // needed for executing wmic command)
-            BufferedWriter bw = new BufferedWriter(
-                new OutputStreamWriter(p.getOutputStream()));
-            bw.write(13);
-            bw.flush();
-            bw.close();
+            BufferedWriter bw = null;
+            try {
+                bw = new BufferedWriter(
+                         new OutputStreamWriter(p.getOutputStream()));
+                bw.write(13);
+                bw.flush();
+            } finally {
+                if (bw != null) {
+                    bw.close();
+                }
+            }
 
             p.waitFor();
             if (p.exitValue() == 0) {