1 /* 2 * Copyright (c) 2012, 2020, 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 @java.io.Serial 36 private static final long serialVersionUID = -8134305061645241065L; 37 38 /** 39 * Constructs an instance of this class. 40 * 41 * @param message 42 * the detail message, can be null 43 * @param cause 44 * the {@code IOException} 45 * 46 * @throws NullPointerException 47 * if the cause is {@code null} 48 */ UncheckedIOException(String message, IOException cause)49 public UncheckedIOException(String message, IOException cause) { 50 super(message, Objects.requireNonNull(cause)); 51 } 52 53 /** 54 * Constructs an instance of this class. 55 * 56 * @param cause 57 * the {@code IOException} 58 * 59 * @throws NullPointerException 60 * if the cause is {@code null} 61 */ UncheckedIOException(IOException cause)62 public UncheckedIOException(IOException cause) { 63 super(Objects.requireNonNull(cause)); 64 } 65 66 /** 67 * Returns the cause of this exception. 68 * 69 * @return the {@code IOException} which is the cause of this exception. 70 */ 71 @Override getCause()72 public IOException getCause() { 73 return (IOException) super.getCause(); 74 } 75 76 /** 77 * Called to read the object from a stream. 78 * 79 * @param s the {@code ObjectInputStream} from which data is read 80 * @throws IOException if an I/O error occurs 81 * @throws ClassNotFoundException if a serialized class cannot be loaded 82 * @throws InvalidObjectException 83 * if the object is invalid or has a cause that is not 84 * an {@code IOException} 85 */ 86 @java.io.Serial readObject(ObjectInputStream s)87 private void readObject(ObjectInputStream s) 88 throws IOException, ClassNotFoundException 89 { 90 s.defaultReadObject(); 91 Throwable cause = super.getCause(); 92 if (!(cause instanceof IOException)) 93 throw new InvalidObjectException("Cause must be an IOException"); 94 } 95 } 96