View Javadoc
1   /*
2    * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.  Oracle designates this
8    * particular file as subject to the "Classpath" exception as provided
9    * by Oracle in the LICENSE file that accompanied this code.
10   *
11   * This code is distributed in the hope that it will be useful, but WITHOUT
12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14   * version 2 for more details (a copy is included in the LICENSE file that
15   * accompanied this code).
16   *
17   * You should have received a copy of the GNU General Public License version
18   * 2 along with this work; if not, write to the Free Software Foundation,
19   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20   *
21   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22   * or visit www.oracle.com if you need additional information or have any
23   * questions.
24   */
25  package java.io;
26  
27  import java.util.Objects;
28  
29  /**
30   * Wraps an {@link IOException} with an unchecked exception.
31   *
32   * @since   1.8
33   */
34  public class UncheckedIOException extends RuntimeException {
35      private static final long serialVersionUID = -8134305061645241065L;
36  
37      /**
38       * Constructs an instance of this class.
39       *
40       * @param   message
41       *          the detail message, can be null
42       * @param   cause
43       *          the {@code IOException}
44       *
45       * @throws  NullPointerException
46       *          if the cause is {@code null}
47       */
48      public UncheckedIOException(String message, IOException cause) {
49          super(message, Objects.requireNonNull(cause));
50      }
51  
52      /**
53       * Constructs an instance of this class.
54       *
55       * @param   cause
56       *          the {@code IOException}
57       *
58       * @throws  NullPointerException
59       *          if the cause is {@code null}
60       */
61      public UncheckedIOException(IOException cause) {
62          super(Objects.requireNonNull(cause));
63      }
64  
65      /**
66       * Returns the cause of this exception.
67       *
68       * @return  the {@code IOException} which is the cause of this exception.
69       */
70      @Override
71      public IOException getCause() {
72          return (IOException) super.getCause();
73      }
74  
75      /**
76       * Called to read the object from a stream.
77       *
78       * @throws  InvalidObjectException
79       *          if the object is invalid or has a cause that is not
80       *          an {@code IOException}
81       */
82      private void readObject(ObjectInputStream s)
83          throws IOException, ClassNotFoundException
84      {
85          s.defaultReadObject();
86          Throwable cause = super.getCause();
87          if (!(cause instanceof IOException))
88              throw new InvalidObjectException("Cause must be an IOException");
89      }
90  }