mirror of
https://github.com/corda/corda.git
synced 2025-01-07 13:38:47 +00:00
325 lines
7.2 KiB
Java
325 lines
7.2 KiB
Java
/* Copyright (c) 2008-2014, Avian Contributors
|
|
|
|
Permission to use, copy, modify, and/or distribute this software
|
|
for any purpose with or without fee is hereby granted, provided
|
|
that the above copyright notice and this permission notice appear
|
|
in all copies.
|
|
|
|
There is NO WARRANTY for this software. See license.txt for
|
|
details. */
|
|
|
|
package java.io;
|
|
|
|
public class File implements Serializable {
|
|
private static final String FileSeparator
|
|
= System.getProperty("file.separator");
|
|
|
|
public static final String separator = FileSeparator;
|
|
|
|
public static final char separatorChar = FileSeparator.charAt(0);
|
|
|
|
private static final String PathSeparator
|
|
= System.getProperty("path.separator");
|
|
|
|
public static final String pathSeparator = PathSeparator;
|
|
|
|
public static final char pathSeparatorChar = PathSeparator.charAt(0);
|
|
|
|
// static {
|
|
// System.loadLibrary("natives");
|
|
// }
|
|
|
|
private final String path;
|
|
|
|
public File(String path) {
|
|
if (path == null) throw new NullPointerException();
|
|
this.path = normalize(path);
|
|
}
|
|
|
|
public File(String parent, String child) {
|
|
this(parent + FileSeparator + child);
|
|
}
|
|
|
|
public File(File parent, String child) {
|
|
this(parent.getPath() + FileSeparator + child);
|
|
}
|
|
|
|
public static File createTempFile(String prefix, String suffix)
|
|
throws IOException
|
|
{
|
|
return createTempFile(prefix, suffix, null);
|
|
}
|
|
|
|
public static File createTempFile(String prefix, String suffix,
|
|
File directory)
|
|
throws IOException
|
|
{
|
|
if(directory == null) {
|
|
directory = new File(System.getProperty("java.io.tmpdir"));
|
|
}
|
|
if(suffix == null) {
|
|
suffix = ".tmp";
|
|
}
|
|
File ret;
|
|
long state = System.currentTimeMillis();
|
|
|
|
do {
|
|
ret = generateFile(directory, prefix, state, suffix);
|
|
state *= 7;
|
|
state += 3;
|
|
} while(ret == null);
|
|
ret.createNewFile();
|
|
return ret;
|
|
}
|
|
|
|
private static File generateFile(File directory, String prefix, long state, String suffix) {
|
|
File ret = new File(directory, prefix + state + suffix);
|
|
if(ret.exists()) {
|
|
return null;
|
|
} else {
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
private static String stripSeparators(String p) {
|
|
while (p.endsWith(FileSeparator)) {
|
|
p = p.substring(0, p.length() - 1);
|
|
}
|
|
return p;
|
|
}
|
|
|
|
private static String normalize(String path) {
|
|
return stripSeparators
|
|
("\\".equals(FileSeparator) ? path.replace('/', '\\') : path);
|
|
}
|
|
|
|
public static native boolean rename(String old, String new_);
|
|
|
|
public boolean renameTo(File newName) {
|
|
return rename(path, newName.path);
|
|
}
|
|
|
|
private static native boolean isDirectory(String path);
|
|
|
|
public boolean isDirectory() {
|
|
return isDirectory(path);
|
|
}
|
|
|
|
private static native boolean isFile(String path);
|
|
|
|
public boolean isFile() {
|
|
return isFile(path);
|
|
}
|
|
|
|
public boolean isAbsolute() {
|
|
return path.equals(toAbsolutePath(path));
|
|
}
|
|
|
|
private static native boolean canRead(String path);
|
|
|
|
public boolean canRead() {
|
|
return canRead(path);
|
|
}
|
|
|
|
private static native boolean canWrite(String path);
|
|
|
|
public boolean canWrite() {
|
|
return canWrite(path);
|
|
}
|
|
|
|
private static native boolean canExecute(String path);
|
|
|
|
public boolean canExecute() {
|
|
return canExecute(path);
|
|
}
|
|
|
|
private static native boolean setExecutable(String path, boolean executable, boolean ownerOnly);
|
|
|
|
public boolean setExecutable(boolean executable) {
|
|
return setExecutable(executable, true);
|
|
}
|
|
|
|
public boolean setExecutable(boolean executable, boolean ownerOnly) {
|
|
return setExecutable(path, executable, ownerOnly);
|
|
}
|
|
|
|
public String getName() {
|
|
int index = path.lastIndexOf(FileSeparator);
|
|
if (index >= 0) {
|
|
return path.substring(index + 1);
|
|
} else {
|
|
return path;
|
|
}
|
|
}
|
|
|
|
public String toString() {
|
|
return getPath();
|
|
}
|
|
|
|
public String getPath() {
|
|
return path;
|
|
}
|
|
|
|
public String getParent() {
|
|
int index = path.lastIndexOf(FileSeparator);
|
|
if (index >= 0) {
|
|
return normalize(path.substring(0, index));
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public File getParentFile() {
|
|
String s = getParent();
|
|
return (s == null ? null : new File(s));
|
|
}
|
|
|
|
private static native String toCanonicalPath(String path);
|
|
|
|
public String getCanonicalPath() {
|
|
return toCanonicalPath(path);
|
|
}
|
|
|
|
public File getCanonicalFile() {
|
|
return new File(getCanonicalPath());
|
|
}
|
|
|
|
private static native String toAbsolutePath(String path);
|
|
|
|
public String getAbsolutePath() {
|
|
return toAbsolutePath(path);
|
|
}
|
|
|
|
public File getAbsoluteFile() {
|
|
return new File(getAbsolutePath());
|
|
}
|
|
|
|
private static native long length(String path);
|
|
|
|
public long length() {
|
|
return length(path);
|
|
}
|
|
|
|
private static native boolean exists(String path);
|
|
|
|
public boolean exists() {
|
|
return exists(path);
|
|
}
|
|
|
|
private static native void mkdir(String path) throws IOException;
|
|
|
|
public boolean mkdir() {
|
|
try {
|
|
mkdir(path);
|
|
return true;
|
|
} catch (IOException e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private static native boolean createNewFile(String path) throws IOException;
|
|
|
|
public boolean createNewFile() throws IOException {
|
|
return createNewFile(path);
|
|
}
|
|
|
|
public static native void delete(String path) throws IOException;
|
|
|
|
public boolean delete() {
|
|
try {
|
|
delete(path);
|
|
return true;
|
|
} catch (IOException e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public boolean mkdirs() {
|
|
File parent = getParentFile();
|
|
if (parent != null) {
|
|
if (!parent.exists()) {
|
|
if (!parent.mkdirs()) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return mkdir();
|
|
}
|
|
|
|
public File[] listFiles() {
|
|
return listFiles(null);
|
|
}
|
|
|
|
public File[] listFiles(FilenameFilter filter) {
|
|
String[] list = list(filter);
|
|
if (list != null) {
|
|
File[] result = new File[list.length];
|
|
for (int i = 0; i < list.length; ++i) {
|
|
result[i] = new File(this, list[i]);
|
|
}
|
|
return result;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public String[] list() {
|
|
return list(null);
|
|
}
|
|
|
|
public String[] list(FilenameFilter filter) {
|
|
long handle = 0;
|
|
try {
|
|
handle = openDir(path);
|
|
if (handle != 0) {
|
|
Pair list = null;
|
|
int count = 0;
|
|
for (String s = readDir(handle); s != null; s = readDir(handle)) {
|
|
if (filter == null || filter.accept(this, s)) {
|
|
list = new Pair(s, list);
|
|
++ count;
|
|
}
|
|
}
|
|
|
|
String[] result = new String[count];
|
|
for (int i = count - 1; i >= 0; --i) {
|
|
result[i] = list.value;
|
|
list = list.next;
|
|
}
|
|
|
|
return result;
|
|
} else {
|
|
return null;
|
|
}
|
|
} finally {
|
|
if (handle != 0) {
|
|
closeDir(handle);
|
|
}
|
|
}
|
|
}
|
|
|
|
public long lastModified() {
|
|
return lastModified(path);
|
|
}
|
|
private static native long openDir(String path);
|
|
|
|
private static native long lastModified(String path);
|
|
|
|
private static native String readDir(long handle);
|
|
|
|
private static native void closeDir(long handle);
|
|
|
|
|
|
|
|
private static class Pair {
|
|
public final String value;
|
|
public final Pair next;
|
|
|
|
public Pair(String value, Pair next) {
|
|
this.value = value;
|
|
this.next = next;
|
|
}
|
|
}
|
|
|
|
}
|