X-Git-Url: https://oss.titaniummirror.com/gitweb?a=blobdiff_plain;f=libjava%2Fjava%2Fio%2FFile.java;fp=libjava%2Fjava%2Fio%2FFile.java;h=0000000000000000000000000000000000000000;hb=6fed43773c9b0ce596dca5686f37ac3fc0fa11c0;hp=2086f1057aa3c06672f11820e1205812c73c8999;hpb=27b11d56b743098deb193d510b337ba22dc52e5c;p=msp430-gcc.git diff --git a/libjava/java/io/File.java b/libjava/java/io/File.java deleted file mode 100644 index 2086f105..00000000 --- a/libjava/java/io/File.java +++ /dev/null @@ -1,585 +0,0 @@ -// File.java - File name - -/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation - - This file is part of libgcj. - -This software is copyrighted work licensed under the terms of the -Libgcj License. Please consult the file "LIBGCJ_LICENSE" for -details. */ - -package java.io; - -import java.util.*; -import java.net.*; -import gnu.gcj.runtime.FileDeleter; - -/** - * @author Tom Tromey - * @date September 24, 1998 - */ - -/* Written using "Java Class Libraries", 2nd edition, ISBN 0-201-31002-3 - * "The Java Language Specification", ISBN 0-201-63451-1 - * Status: Complete to version 1.3. - */ - -public class File implements Serializable, Comparable -{ - public boolean canRead () - { - checkRead(); - return _access (READ); - } - - public boolean canWrite () - { - checkWrite(); - return _access (WRITE); - } - - private native boolean performCreate() throws IOException; - - /** @since 1.2 */ - public boolean createNewFile() throws IOException - { - checkWrite(); - return performCreate(); - } - - private native boolean performDelete (); - public boolean delete () - { - SecurityManager s = System.getSecurityManager(); - String name = path; - if (s != null) - s.checkDelete(path); - return performDelete (); - } - - public boolean equals (Object obj) - { - if (! (obj instanceof File)) - return false; - File other = (File) obj; - if (caseSensitive) - return (path.equals(other.path)); - else - return (path.equalsIgnoreCase(other.path)); - } - - public boolean exists () - { - checkRead(); - return _access (EXISTS); - } - - public File (String p) - { - path = normalizePath(p); - } - - // Remove duplicate and redundant separator characters. - private String normalizePath(String p) - { - // On Windows, convert any '/' to '\'. This appears to be the same logic - // that Sun's Win32 Java performs. - if (separatorChar == '\\') - p = p.replace ('/', '\\'); - - int dupIndex = p.indexOf(dupSeparator); - int plen = p.length(); - - // Special case: permit Windows UNC path prefix. - if (dupSeparator.equals("\\\\") && dupIndex == 0) - dupIndex = p.indexOf(dupSeparator, 1); - - if (dupIndex == -1) - { - // Ignore trailing separator. - if (plen > 1 && p.charAt(plen - 1) == separatorChar) - return p.substring(0, plen - 1); - else - return p; - } - - StringBuffer newpath = new StringBuffer(plen); - int last = 0; - while (dupIndex != -1) - { - newpath.append(p.substring(last, dupIndex)); - // Ignore the duplicate path characters. - while (p.charAt(dupIndex) == separatorChar) - { - dupIndex++; - if (dupIndex == plen) - return newpath.toString(); - } - newpath.append(separatorChar); - last = dupIndex; - dupIndex = p.indexOf(dupSeparator, last); - } - - // Again, ignore possible trailing separator. - int end; - if (plen > 1 && p.charAt(plen - 1) == separatorChar) - end = plen - 1; - else - end = plen; - newpath.append(p.substring(last, end)); - - return newpath.toString(); - } - - public File (String dirPath, String name) - { - if (name == null) - throw new NullPointerException (); - if (dirPath != null && dirPath.length() > 0) - { - // Try to be smart about the number of separator characters. - if (dirPath.charAt(dirPath.length() - 1) == separatorChar - || name.length() == 0) - path = normalizePath(dirPath + name); - else - path = normalizePath(dirPath + separatorChar + name); - } - else - path = normalizePath(name); - } - - public File (File dir, String name) - { - this (dir == null ? null : dir.path, name); - } - - // FIXME ??? - public String getAbsolutePath () - { - if (isAbsolute ()) - return path; - return System.getProperty("user.dir") + separatorChar + path; - } - - /** @since 1.2 */ - public File getAbsoluteFile () - { - return new File (getAbsolutePath()); - } - - public native String getCanonicalPath () throws IOException; - - /** @since 1.2 */ - public File getCanonicalFile () throws IOException - { - return new File (getCanonicalPath()); - } - - public String getName () - { - int last = path.lastIndexOf(separatorChar); - return path.substring(last + 1); - } - - public String getParent () - { - int last = path.lastIndexOf(separatorChar); - if (last == -1) - return null; - // FIXME: POSIX assumption. - if (last == 0 && path.charAt (0) == '/') - ++last; - return path.substring(0, last); - } - - /** @since 1.2 */ - public File getParentFile () - { - String parent = getParent (); - return (parent == null ? null : new File (parent)); - } - - public String getPath () - { - return path; - } - - public int hashCode () - { - if (caseSensitive) - return (path.hashCode() ^ 1234321); - else - return (path.toLowerCase().hashCode() ^ 1234321); - } - - public native boolean isAbsolute (); - - public boolean isDirectory () - { - checkRead(); - return _stat (DIRECTORY); - } - - public boolean isFile () - { - checkRead(); - return _stat (ISFILE); - } - - /** @since 1.2 */ - public boolean isHidden() - { - checkRead(); - return _stat (ISHIDDEN); - } - - public long lastModified () - { - checkRead(); - return attr (MODIFIED); - } - - public long length () - { - checkRead(); - return attr (LENGTH); - } - - private final native Object[] performList (FilenameFilter filter, - FileFilter fileFilter, - Class result_type); - - public String[] list (FilenameFilter filter) - { - checkRead(); - return (String[]) performList (filter, null, String.class); - } - - public String[] list () - { - checkRead(); - return (String[]) performList (null, null, String.class); - } - - /** @since 1.2 */ - public File[] listFiles() - { - checkRead(); - return (File[]) performList (null, null, File.class); - } - - /** @since 1.2 */ - public File[] listFiles(FilenameFilter filter) - { - checkRead(); - return (File[]) performList (filter, null, File.class); - } - - /** @since 1.2 */ - public File[] listFiles(FileFilter filter) - { - checkRead(); - return (File[]) performList (null, filter, File.class); - } - - public String toString () - { - return path; - } - - public URL toURL () throws MalformedURLException - { - return new URL ("file://" + getAbsolutePath () - + (isDirectory() ? "/" : "")); - } - - private final native boolean performMkdir (); - - public boolean mkdir () - { - checkWrite(); - return performMkdir (); - } - - private static boolean mkdirs (File x) - { - if (x.isDirectory()) - return true; - String p = x.getPath(); - String parent = x.getParent(); - if (parent != null) - { - x.path = parent; - if (! mkdirs (x)) - return false; - x.path = p; - } - return x.mkdir(); - } - - public boolean mkdirs () - { - checkWrite(); - if (isDirectory ()) - return false; - return mkdirs (new File (path)); - } - - private static synchronized String nextValue () - { - return Long.toString(counter++, Character.MAX_RADIX); - } - - /** @since 1.2 */ - public static File createTempFile (String prefix, String suffix, - File directory) - throws IOException - { - // Grab the system temp directory if necessary - if (directory == null) - { - String dirname = tmpdir; - if (dirname == null) - throw - new IOException("Cannot determine system temporary directory"); - - directory = new File(dirname); - if (!directory.exists()) - throw new IOException("System temporary directory " - + directory.getName() + " does not exist."); - if (!directory.isDirectory()) - throw new IOException("System temporary directory " - + directory.getName() - + " is not really a directory."); - } - - if (prefix.length () < 3) - throw new IllegalArgumentException ("Prefix too short: " + prefix); - if (suffix == null) - suffix = ".tmp"; - - // Truncation rules. - // `6' is the number of characters we generate. - if (prefix.length () + 6 + suffix.length () > maxPathLen) - { - int suf_len = 0; - if (suffix.charAt(0) == '.') - suf_len = 4; - suffix = suffix.substring(0, suf_len); - if (prefix.length () + 6 + suf_len > maxPathLen) - prefix = prefix.substring(0, maxPathLen - 6 - suf_len); - } - - File f; - - // How many times should we try? We choose 100. - for (int i = 0; i < 100; ++i) - { - // This is ugly. - String t = "ZZZZZZ" + nextValue (); - String l = prefix + t.substring(t.length() - 6) + suffix; - try - { - f = new File(directory, l); - if (f.createNewFile()) - return f; - } - catch (IOException ignored) - { - } - } - - throw new IOException ("cannot create temporary file"); - } - - private native boolean performSetReadOnly(); - - /** @since 1.2 */ - public boolean setReadOnly() - { - checkWrite(); - return performSetReadOnly(); - } - - private static native File[] performListRoots(); - - /** @since 1.2 */ - public static File[] listRoots() - { - File[] roots = performListRoots(); - - SecurityManager s = System.getSecurityManager(); - if (s != null) - { - // Only return roots to which the security manager permits read access. - int count = roots.length; - for (int i = 0; i < roots.length; i++) - { - try - { - s.checkRead(roots[i].path); - } - catch (SecurityException sx) - { - roots[i] = null; - count--; - } - } - if (count != roots.length) - { - File[] newRoots = new File[count]; - int k = 0; - for (int i=0; i < roots.length; i++) - { - if (roots[i] != null) - newRoots[k++] = roots[i]; - } - roots = newRoots; - } - } - return roots; - } - - public static File createTempFile (String prefix, String suffix) - throws IOException - { - return createTempFile (prefix, suffix, null); - } - - /** @since 1.2 */ - public int compareTo(File other) - { - if (caseSensitive) - return path.compareTo (other.path); - else - return path.compareToIgnoreCase (other.path); - } - - /** @since 1.2 */ - public int compareTo(Object o) - { - File other = (File) o; - return compareTo (other); - } - - private native boolean performRenameTo (File dest); - public boolean renameTo (File dest) - { - SecurityManager s = System.getSecurityManager(); - String sname = getName(); - String dname = dest.getName(); - if (s != null) - { - s.checkWrite(sname); - s.checkWrite(dname); - } - return performRenameTo (dest); - } - - private native boolean performSetLastModified(long time); - - /** @since 1.2 */ - public boolean setLastModified(long time) - { - checkWrite(); - return performSetLastModified(time); - } - - public static final String pathSeparator - = System.getProperty("path.separator"); - public static final char pathSeparatorChar = pathSeparator.charAt(0); - public static final String separator = System.getProperty("file.separator"); - public static final char separatorChar = separator.charAt(0); - - static final String tmpdir = System.getProperty("java.io.tmpdir"); - static int maxPathLen; - static boolean caseSensitive; - static String dupSeparator = separator + separator; - - static - { - init_native(); - } - - // Native function called at class initialization. This should should - // set the maxPathLen and caseSensitive variables. - private static native void init_native(); - - // The path. - private String path; - - // We keep a counter for use by createTempFile. We choose the first - // value randomly to try to avoid clashes with other VMs. - private static long counter = Double.doubleToLongBits (Math.random ()); - - private void checkWrite () - { - SecurityManager s = System.getSecurityManager(); - if (s != null) - s.checkWrite(path); - } - - private void checkRead () - { - SecurityManager s = System.getSecurityManager(); - if (s != null) - s.checkRead(path); - } - - /** - * Add this File to the set of files to be deleted upon normal - * termination. - * - * @since 1.2 - */ - // FIXME: This should use the ShutdownHook API once we implement that. - public void deleteOnExit () - { - SecurityManager sm = System.getSecurityManager (); - if (sm != null) - sm.checkDelete (getName ()); - - FileDeleter.add (this); - } - - private void writeObject (ObjectOutputStream oos) throws IOException - { - oos.defaultWriteObject (); - oos.writeChar (separatorChar); - } - - private void readObject (ObjectInputStream ois) - throws ClassNotFoundException, IOException - { - ois.defaultReadObject (); - - // If the file was from an OS with a different dir separator, - // fixup the path to use the separator on this OS. - char oldSeparatorChar = ois.readChar (); - if (oldSeparatorChar != separatorChar) - path = path.replace (oldSeparatorChar, separatorChar); - } - - // QUERY arguments to access function. - private final static int READ = 0; - private final static int WRITE = 1; - private final static int EXISTS = 2; - - // QUERY arguments to stat function. - private final static int DIRECTORY = 0; - private final static int ISFILE = 1; - private final static int ISHIDDEN = 2; - - // QUERY arguments to attr function. - private final static int MODIFIED = 0; - private final static int LENGTH = 1; - - private final native long attr (int query); - // On OSF1 V5.0, `stat' is a macro. It is easiest to use the name - // `_stat' instead. We do the same thing for `_access' just in - // case. - private final native boolean _access (int query); - private final native boolean _stat (int query); - - private static final long serialVersionUID = 301077366599181567L; -}