--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.compiler/share/classes/javax/tools/FileObject.java Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package javax.tools;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
+import java.net.URI;
+
+/**
+ * File abstraction for tools. In this context, <em>file</em> means
+ * an abstraction of regular files and other sources of data. For
+ * example, a file object can be used to represent regular files,
+ * memory cache, or data in databases.
+ *
+ * <p>All methods in this interface might throw a SecurityException if
+ * a security exception occurs.
+ *
+ * <p>Unless explicitly allowed, all methods in this interface might
+ * throw a NullPointerException if given a {@code null} argument.
+ *
+ * @author Peter von der Ahé
+ * @author Jonathan Gibbons
+ * @since 1.6
+ */
+public interface FileObject {
+
+ /**
+ * Returns a URI identifying this file object.
+ * @return a URI
+ */
+ URI toUri();
+
+ /**
+ * Returns a user-friendly name for this file object. The exact
+ * value returned is not specified but implementations should take
+ * care to preserve names as given by the user. For example, if
+ * the user writes the filename {@code "BobsApp\Test.java"} on
+ * the command line, this method should return {@code
+ * "BobsApp\Test.java"} whereas the {@linkplain #toUri toUri}
+ * method might return {@code
+ * file:///C:/Documents%20and%20Settings/UncleBob/BobsApp/Test.java}.
+ *
+ * @return a user-friendly name
+ */
+ String getName();
+
+ /**
+ * Returns an InputStream for this file object.
+ *
+ * @return an InputStream
+ * @throws IllegalStateException if this file object was
+ * opened for writing and does not support reading
+ * @throws UnsupportedOperationException if this kind of file
+ * object does not support byte access
+ * @throws IOException if an I/O error occurred
+ */
+ InputStream openInputStream() throws IOException;
+
+ /**
+ * Returns an OutputStream for this file object.
+ *
+ * @return an OutputStream
+ * @throws IllegalStateException if this file object was
+ * opened for reading and does not support writing
+ * @throws UnsupportedOperationException if this kind of
+ * file object does not support byte access
+ * @throws IOException if an I/O error occurred
+ */
+ OutputStream openOutputStream() throws IOException;
+
+ /**
+ * Returns a reader for this object. The returned reader will
+ * replace bytes that cannot be decoded with the default
+ * translation character. In addition, the reader may report a
+ * diagnostic unless {@code ignoreEncodingErrors} is true.
+ *
+ * @param ignoreEncodingErrors ignore encoding errors if true
+ * @return a Reader
+ * @throws IllegalStateException if this file object was
+ * opened for writing and does not support reading
+ * @throws UnsupportedOperationException if this kind of
+ * file object does not support character access
+ * @throws IOException if an I/O error occurred
+ */
+ Reader openReader(boolean ignoreEncodingErrors) throws IOException;
+
+ /**
+ * Returns the character content of this file object, if available.
+ * Any byte that cannot be decoded will be replaced by the default
+ * translation character. In addition, a diagnostic may be
+ * reported unless {@code ignoreEncodingErrors} is true.
+ *
+ * @param ignoreEncodingErrors ignore encoding errors if true
+ * @return a CharSequence if available; {@code null} otherwise
+ * @throws IllegalStateException if this file object was
+ * opened for writing and does not support reading
+ * @throws UnsupportedOperationException if this kind of
+ * file object does not support character access
+ * @throws IOException if an I/O error occurred
+ */
+ CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException;
+
+ /**
+ * Returns a Writer for this file object.
+ *
+ * @return a Writer
+ * @throws IllegalStateException if this file object was
+ * opened for reading and does not support writing
+ * @throws UnsupportedOperationException if this kind of
+ * file object does not support character access
+ * @throws IOException if an I/O error occurred
+ */
+ Writer openWriter() throws IOException;
+
+ /**
+ * Returns the time this file object was last modified. The time is
+ * measured in milliseconds since the epoch (00:00:00 GMT, January
+ * 1, 1970).
+ *
+ * @return the time this file object was last modified; or 0 if
+ * the file object does not exist, if an I/O error occurred, or if
+ * the operation is not supported
+ */
+ long getLastModified();
+
+ /**
+ * Deletes this file object. In case of errors, returns false.
+ * @return true if and only if this file object is successfully
+ * deleted; false otherwise
+ */
+ boolean delete();
+
+}