?? fileutils.java
字號:
//-----------------------------------------------------------------------
/**
* Writes a String to a file creating the file if it does not exist.
* <p>
* There is no writeStringToFile method without encoding parameter because
* the default encoding can differ between platforms and will have
* inconsistent results.
*
* @param file the file to write
* @param data the content to write to the file
* @param encoding the encoding to use, null means platform default
* @throws IOException in case of an I/O error
* @throws UnsupportedEncodingException if the encoding is not supported by the VM
*/
public static void writeStringToFile(File file,
String data, String encoding) throws IOException {
OutputStream out = new FileOutputStream(file);
try {
IOUtils.write(data, out, encoding);
} finally {
IOUtils.closeQuietly(out);
}
}
/**
* Writes a byte array to a file creating the file if it does not exist.
*
* @param file the file to write to
* @param data the content to write to the file
* @throws IOException in case of an I/O error
* @since Commons IO 1.1
*/
public static void writeByteArrayToFile(
File file, byte[] data) throws IOException {
OutputStream out = new FileOutputStream(file);
try {
out.write(data);
} finally {
IOUtils.closeQuietly(out);
}
}
/**
* Writes the <code>toString()</code> value of each item in a collection to
* the specified <code>File</code> line by line.
* The specified character encoding and the default line ending will be used.
* <p>
* There is no writeLines method without encoding parameter because
* the default encoding can differ between platforms and will have
* inconsistent results.
*
* @param file the file to write to
* @param encoding the encoding to use, null means platform default
* @param lines the lines to write, null entries produce blank lines
* @throws IOException in case of an I/O error
* @throws UnsupportedEncodingException if the encoding is not supported by the VM
* @since Commons IO 1.1
*/
public static void writeLines(File file, String encoding, Collection lines) throws IOException {
writeLines(file, encoding, lines, null);
}
/**
* Writes the <code>toString()</code> value of each item in a collection to
* the specified <code>File</code> line by line.
* The specified character encoding and the line ending will be used.
* <p>
* There is no writeLines method without encoding parameter because
* the default encoding can differ between platforms and will have
* inconsistent results.
*
* @param file the file to write to
* @param encoding the encoding to use, null means platform default
* @param lines the lines to write, null entries produce blank lines
* @param lineEnding the line separator to use, null is system default
* @throws IOException in case of an I/O error
* @throws UnsupportedEncodingException if the encoding is not supported by the VM
* @since Commons IO 1.1
*/
public static void writeLines(File file, String encoding, Collection lines, String lineEnding) throws IOException {
OutputStream out = new FileOutputStream(file);
try {
IOUtils.writeLines(lines, lineEnding, out, encoding);
} finally {
IOUtils.closeQuietly(out);
}
}
//-----------------------------------------------------------------------
/**
* Delete a file. If file is a directory, delete it and all sub-directories.
* <p>
* The difference between File.delete() and this method are:
* <ul>
* <li>A directory to be deleted does not have to be empty.</li>
* <li>You get exceptions when a file or directory cannot be deleted.
* (java.io.File methods returns a boolean)</li>
* </ul>
*
* @param file file or directory to delete, not null
* @throws NullPointerException if the directory is null
* @throws IOException in case deletion is unsuccessful
*/
public static void forceDelete(File file) throws IOException {
if (file.isDirectory()) {
deleteDirectory(file);
} else {
if (!file.exists()) {
throw new FileNotFoundException("File does not exist: " + file);
}
if (!file.delete()) {
String message =
"Unable to delete file: " + file;
throw new IOException(message);
}
}
}
/**
* Schedule a file to be deleted when JVM exits.
* If file is directory delete it and all sub-directories.
*
* @param file file or directory to delete, not null
* @throws NullPointerException if the file is null
* @throws IOException in case deletion is unsuccessful
*/
public static void forceDeleteOnExit(File file) throws IOException {
if (file.isDirectory()) {
deleteDirectoryOnExit(file);
} else {
file.deleteOnExit();
}
}
/**
* Recursively schedule directory for deletion on JVM exit.
*
* @param directory directory to delete, not null
* @throws NullPointerException if the directory is null
* @throws IOException in case deletion is unsuccessful
*/
private static void deleteDirectoryOnExit(File directory) throws IOException {
if (!directory.exists()) {
return;
}
cleanDirectoryOnExit(directory);
directory.deleteOnExit();
}
/**
* Clean a directory without deleting it.
*
* @param directory directory to clean, not null
* @throws NullPointerException if the directory is null
* @throws IOException in case cleaning is unsuccessful
*/
private static void cleanDirectoryOnExit(File directory) throws IOException {
if (!directory.exists()) {
String message = directory + " does not exist";
throw new IllegalArgumentException(message);
}
if (!directory.isDirectory()) {
String message = directory + " is not a directory";
throw new IllegalArgumentException(message);
}
File[] files = directory.listFiles();
if (files == null) { // null if security restricted
throw new IOException("Failed to list contents of " + directory);
}
IOException exception = null;
for (int i = 0; i < files.length; i++) {
File file = files[i];
try {
forceDeleteOnExit(file);
} catch (IOException ioe) {
exception = ioe;
}
}
if (null != exception) {
throw exception;
}
}
/**
* Make a directory, including any necessary but nonexistent parent
* directories. If there already exists a file with specified name or
* the directory cannot be created then an exception is thrown.
*
* @param directory directory to create, not null
* @throws NullPointerException if the directory is null
* @throws IOException if the directory cannot be created
*/
public static void forceMkdir(File directory) throws IOException {
if (directory.exists()) {
if (directory.isFile()) {
String message =
"File "
+ directory
+ " exists and is "
+ "not a directory. Unable to create directory.";
throw new IOException(message);
}
} else {
if (!directory.mkdirs()) {
String message =
"Unable to create directory " + directory;
throw new IOException(message);
}
}
}
//-----------------------------------------------------------------------
/**
* Recursively count size of a directory (sum of the length of all files).
*
* @param directory directory to inspect, not null
* @return size of directory in bytes, 0 if directory is security restricted
* @throws NullPointerException if the directory is null
*/
public static long sizeOfDirectory(File directory) {
if (!directory.exists()) {
String message = directory + " does not exist";
throw new IllegalArgumentException(message);
}
if (!directory.isDirectory()) {
String message = directory + " is not a directory";
throw new IllegalArgumentException(message);
}
long size = 0;
File[] files = directory.listFiles();
if (files == null) { // null if security restricted
return 0L;
}
for (int i = 0; i < files.length; i++) {
File file = files[i];
if (file.isDirectory()) {
size += sizeOfDirectory(file);
} else {
size += file.length();
}
}
return size;
}
//-----------------------------------------------------------------------
/**
* Tests if the specified <code>File</code> is newer than the reference
* <code>File</code>.
*
* @param file the <code>File</code> of which the modification date must
* be compared, not null
* @param reference the <code>File</code> of which the modification date
* is used, not null
* @return true if the <code>File</code> exists and has been modified more
* recently than the reference <code>File</code>
* @throws IllegalArgumentException if the file is null
* @throws IllegalArgumentException if the reference file is null or doesn't exist
*/
public static boolean isFileNewer(File file, File reference) {
if (reference == null) {
throw new IllegalArgumentException("No specified reference file");
}
if (!reference.exists()) {
throw new IllegalArgumentException("The reference file '"
+ file + "' doesn't exist");
}
return isFileNewer(file, reference.lastModified());
}
/**
* Tests if the specified <code>File</code> is newer than the specified
* <code>Date</code>.
*
* @param file the <code>File</code> of which the modification date
* must be compared, not null
* @param date the date reference, not null
* @return true if the <code>File</code> exists and has been modified
* after the given <code>Date</code>.
* @throws IllegalArgumentException if the file is null
* @throws IllegalArgumentException if the date is null
*/
public static boolean isFileNewer(File file, Date date) {
if (date == null) {
throw new IllegalArgumentException("No specified date");
}
return isFileNewer(file, date.getTime());
}
/**
* Tests if the specified <code>File</code> is newer than the specified
* time reference.
*
* @param file the <code>File</code> of which the modification date must
* be compared, not null
* @param timeMillis the time reference measured in milliseconds since the
* epoch (00:00:00 GMT, January 1, 1970)
* @return true if the <code>File</code> exists and has been modified after
* the given time reference.
* @throws IllegalArgumentException if the file is null
*/
public static boolean isFileNewer(File file, long timeMillis) {
if (file == null) {
throw new IllegalArgumentException("No specified file");
}
if (!file.exists()) {
return false;
}
return file.lastModified() > timeMillis;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -