- * if the file exists.
- *
- * @param fileToDelete the file to delete, not null
- * @return Always returns true
- * @throws NullPointerException if the file is null
- * @throws IOException if an error occurs during file deletion
- */
- protected boolean doDelete(File fileToDelete) throws IOException {
- FileUtils.forceDelete(fileToDelete);
- return true;
- }
- }
-
-}
diff --git a/src/org/apache/commons/io/FileSystemUtils.java b/src/org/apache/commons/io/FileSystemUtils.java
deleted file mode 100644
index a29dba439..000000000
--- a/src/org/apache/commons/io/FileSystemUtils.java
+++ /dev/null
@@ -1,457 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.StringTokenizer;
-
-/**
- * General File System utilities.
- *
- * This class provides static utility methods for general file system
- * functions not provided via the JDK {@link java.io.File File} class.
- *
- * The current functions provided are:
- *
- * - Get the free space on a drive
- *
- *
- * @author Frank W. Zammetti
- * @author Stephen Colebourne
- * @author Thomas Ledoux
- * @author James Urie
- * @author Magnus Grimsell
- * @author Thomas Ledoux
- * @version $Id: FileSystemUtils.java 453889 2006-10-07 11:56:25Z scolebourne $
- * @since Commons IO 1.1
- */
-public class FileSystemUtils {
-
- /** Singleton instance, used mainly for testing. */
- private static final FileSystemUtils INSTANCE = new FileSystemUtils();
-
- /** Operating system state flag for error. */
- private static final int INIT_PROBLEM = -1;
- /** Operating system state flag for neither Unix nor Windows. */
- private static final int OTHER = 0;
- /** Operating system state flag for Windows. */
- private static final int WINDOWS = 1;
- /** Operating system state flag for Unix. */
- private static final int UNIX = 2;
- /** Operating system state flag for Posix flavour Unix. */
- private static final int POSIX_UNIX = 3;
-
- /** The operating system flag. */
- private static final int OS;
- static {
- int os = OTHER;
- try {
- String osName = System.getProperty("os.name");
- if (osName == null) {
- throw new IOException("os.name not found");
- }
- osName = osName.toLowerCase();
- // match
- if (osName.indexOf("windows") != -1) {
- os = WINDOWS;
- } else if (osName.indexOf("linux") != -1 ||
- osName.indexOf("sun os") != -1 ||
- osName.indexOf("sunos") != -1 ||
- osName.indexOf("solaris") != -1 ||
- osName.indexOf("mpe/ix") != -1 ||
- osName.indexOf("freebsd") != -1 ||
- osName.indexOf("irix") != -1 ||
- osName.indexOf("digital unix") != -1 ||
- osName.indexOf("unix") != -1 ||
- osName.indexOf("mac os x") != -1) {
- os = UNIX;
- } else if (osName.indexOf("hp-ux") != -1 ||
- osName.indexOf("aix") != -1) {
- os = POSIX_UNIX;
- } else {
- os = OTHER;
- }
-
- } catch (Exception ex) {
- os = INIT_PROBLEM;
- }
- OS = os;
- }
-
- /**
- * Instances should NOT be constructed in standard programming.
- */
- public FileSystemUtils() {
- super();
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns the free space on a drive or volume by invoking
- * the command line.
- * This method does not normalize the result, and typically returns
- * bytes on Windows, 512 byte units on OS X and kilobytes on Unix.
- * As this is not very useful, this method is deprecated in favour
- * of {@link #freeSpaceKb(String)} which returns a result in kilobytes.
- *
- * Note that some OS's are NOT currently supported, including OS/390,
- * OpenVMS and and SunOS 5. (SunOS is supported by freeSpaceKb
.)
- *
- * FileSystemUtils.freeSpace("C:"); // Windows
- * FileSystemUtils.freeSpace("/volume"); // *nix
- *
- * The free space is calculated via the command line.
- * It uses 'dir /-c' on Windows and 'df' on *nix.
- *
- * @param path the path to get free space for, not null, not empty on Unix
- * @return the amount of free drive space on the drive or volume
- * @throws IllegalArgumentException if the path is invalid
- * @throws IllegalStateException if an error occurred in initialisation
- * @throws IOException if an error occurs when finding the free space
- * @since Commons IO 1.1, enhanced OS support in 1.2 and 1.3
- * @deprecated Use freeSpaceKb(String)
- * Deprecated from 1.3, may be removed in 2.0
- */
- public static long freeSpace(String path) throws IOException {
- return INSTANCE.freeSpaceOS(path, OS, false);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns the free space on a drive or volume in kilobytes by invoking
- * the command line.
- *
- * FileSystemUtils.freeSpaceKb("C:"); // Windows
- * FileSystemUtils.freeSpaceKb("/volume"); // *nix
- *
- * The free space is calculated via the command line.
- * It uses 'dir /-c' on Windows, 'df -kP' on AIX/HP-UX and 'df -k' on other Unix.
- *
- * In order to work, you must be running Windows, or have a implementation of
- * Unix df that supports GNU format when passed -k (or -kP). If you are going
- * to rely on this code, please check that it works on your OS by running
- * some simple tests to compare the command line with the output from this class.
- * If your operating system isn't supported, please raise a JIRA call detailing
- * the exact result from df -k and as much other detail as possible, thanks.
- *
- * @param path the path to get free space for, not null, not empty on Unix
- * @return the amount of free drive space on the drive or volume in kilobytes
- * @throws IllegalArgumentException if the path is invalid
- * @throws IllegalStateException if an error occurred in initialisation
- * @throws IOException if an error occurs when finding the free space
- * @since Commons IO 1.2, enhanced OS support in 1.3
- */
- public static long freeSpaceKb(String path) throws IOException {
- return INSTANCE.freeSpaceOS(path, OS, true);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns the free space on a drive or volume in a cross-platform manner.
- * Note that some OS's are NOT currently supported, including OS/390.
- *
- * FileSystemUtils.freeSpace("C:"); // Windows
- * FileSystemUtils.freeSpace("/volume"); // *nix
- *
- * The free space is calculated via the command line.
- * It uses 'dir /-c' on Windows and 'df' on *nix.
- *
- * @param path the path to get free space for, not null, not empty on Unix
- * @param os the operating system code
- * @param kb whether to normalize to kilobytes
- * @return the amount of free drive space on the drive or volume
- * @throws IllegalArgumentException if the path is invalid
- * @throws IllegalStateException if an error occurred in initialisation
- * @throws IOException if an error occurs when finding the free space
- */
- long freeSpaceOS(String path, int os, boolean kb) throws IOException {
- if (path == null) {
- throw new IllegalArgumentException("Path must not be empty");
- }
- switch (os) {
- case WINDOWS:
- return (kb ? freeSpaceWindows(path) / 1024 : freeSpaceWindows(path));
- case UNIX:
- return freeSpaceUnix(path, kb, false);
- case POSIX_UNIX:
- return freeSpaceUnix(path, kb, true);
- case OTHER:
- throw new IllegalStateException("Unsupported operating system");
- default:
- throw new IllegalStateException(
- "Exception caught when determining operating system");
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Find free space on the Windows platform using the 'dir' command.
- *
- * @param path the path to get free space for, including the colon
- * @return the amount of free drive space on the drive
- * @throws IOException if an error occurs
- */
- long freeSpaceWindows(String path) throws IOException {
- path = FilenameUtils.normalize(path);
- if (path.length() > 2 && path.charAt(1) == ':') {
- path = path.substring(0, 2); // seems to make it work
- }
-
- // build and run the 'dir' command
- String[] cmdAttribs = new String[] {"cmd.exe", "/C", "dir /-c " + path};
-
- // read in the output of the command to an ArrayList
- List lines = performCommand(cmdAttribs, Integer.MAX_VALUE);
-
- // now iterate over the lines we just read and find the LAST
- // non-empty line (the free space bytes should be in the last element
- // of the ArrayList anyway, but this will ensure it works even if it's
- // not, still assuming it is on the last non-blank line)
- for (int i = lines.size() - 1; i >= 0; i--) {
- String line = (String) lines.get(i);
- if (line.length() > 0) {
- return parseDir(line, path);
- }
- }
- // all lines are blank
- throw new IOException(
- "Command line 'dir /-c' did not return any info " +
- "for path '" + path + "'");
- }
-
- /**
- * Parses the Windows dir response last line
- *
- * @param line the line to parse
- * @param path the path that was sent
- * @return the number of bytes
- * @throws IOException if an error occurs
- */
- long parseDir(String line, String path) throws IOException {
- // read from the end of the line to find the last numeric
- // character on the line, then continue until we find the first
- // non-numeric character, and everything between that and the last
- // numeric character inclusive is our free space bytes count
- int bytesStart = 0;
- int bytesEnd = 0;
- int j = line.length() - 1;
- innerLoop1: while (j >= 0) {
- char c = line.charAt(j);
- if (Character.isDigit(c)) {
- // found the last numeric character, this is the end of
- // the free space bytes count
- bytesEnd = j + 1;
- break innerLoop1;
- }
- j--;
- }
- innerLoop2: while (j >= 0) {
- char c = line.charAt(j);
- if (!Character.isDigit(c) && c != ',' && c != '.') {
- // found the next non-numeric character, this is the
- // beginning of the free space bytes count
- bytesStart = j + 1;
- break innerLoop2;
- }
- j--;
- }
- if (j < 0) {
- throw new IOException(
- "Command line 'dir /-c' did not return valid info " +
- "for path '" + path + "'");
- }
-
- // remove commas and dots in the bytes count
- StringBuffer buf = new StringBuffer(line.substring(bytesStart, bytesEnd));
- for (int k = 0; k < buf.length(); k++) {
- if (buf.charAt(k) == ',' || buf.charAt(k) == '.') {
- buf.deleteCharAt(k--);
- }
- }
- return parseBytes(buf.toString(), path);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Find free space on the *nix platform using the 'df' command.
- *
- * @param path the path to get free space for
- * @param kb whether to normalize to kilobytes
- * @param posix whether to use the posix standard format flag
- * @return the amount of free drive space on the volume
- * @throws IOException if an error occurs
- */
- long freeSpaceUnix(String path, boolean kb, boolean posix) throws IOException {
- if (path.length() == 0) {
- throw new IllegalArgumentException("Path must not be empty");
- }
- path = FilenameUtils.normalize(path);
-
- // build and run the 'dir' command
- String flags = "-";
- if (kb) {
- flags += "k";
- }
- if (posix) {
- flags += "P";
- }
- String[] cmdAttribs =
- (flags.length() > 1 ? new String[] {"df", flags, path} : new String[] {"df", path});
-
- // perform the command, asking for up to 3 lines (header, interesting, overflow)
- List lines = performCommand(cmdAttribs, 3);
- if (lines.size() < 2) {
- // unknown problem, throw exception
- throw new IOException(
- "Command line 'df' did not return info as expected " +
- "for path '" + path + "'- response was " + lines);
- }
- String line2 = (String) lines.get(1); // the line we're interested in
-
- // Now, we tokenize the string. The fourth element is what we want.
- StringTokenizer tok = new StringTokenizer(line2, " ");
- if (tok.countTokens() < 4) {
- // could be long Filesystem, thus data on third line
- if (tok.countTokens() == 1 && lines.size() >= 3) {
- String line3 = (String) lines.get(2); // the line may be interested in
- tok = new StringTokenizer(line3, " ");
- } else {
- throw new IOException(
- "Command line 'df' did not return data as expected " +
- "for path '" + path + "'- check path is valid");
- }
- } else {
- tok.nextToken(); // Ignore Filesystem
- }
- tok.nextToken(); // Ignore 1K-blocks
- tok.nextToken(); // Ignore Used
- String freeSpace = tok.nextToken();
- return parseBytes(freeSpace, path);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Parses the bytes from a string.
- *
- * @param freeSpace the free space string
- * @param path the path
- * @return the number of bytes
- * @throws IOException if an error occurs
- */
- long parseBytes(String freeSpace, String path) throws IOException {
- try {
- long bytes = Long.parseLong(freeSpace);
- if (bytes < 0) {
- throw new IOException(
- "Command line 'df' did not find free space in response " +
- "for path '" + path + "'- check path is valid");
- }
- return bytes;
-
- } catch (NumberFormatException ex) {
- throw new IOException(
- "Command line 'df' did not return numeric data as expected " +
- "for path '" + path + "'- check path is valid");
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Performs the os command.
- *
- * @param cmdAttribs the command line parameters
- * @param max The maximum limit for the lines returned
- * @return the parsed data
- * @throws IOException if an error occurs
- */
- List performCommand(String[] cmdAttribs, int max) throws IOException {
- // this method does what it can to avoid the 'Too many open files' error
- // based on trial and error and these links:
- // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4784692
- // http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4801027
- // http://forum.java.sun.com/thread.jspa?threadID=533029&messageID=2572018
- // however, its still not perfect as the JDK support is so poor
- // (see commond-exec or ant for a better multi-threaded multi-os solution)
-
- List lines = new ArrayList(20);
- Process proc = null;
- InputStream in = null;
- OutputStream out = null;
- InputStream err = null;
- BufferedReader inr = null;
- try {
- proc = openProcess(cmdAttribs);
- in = proc.getInputStream();
- out = proc.getOutputStream();
- err = proc.getErrorStream();
- inr = new BufferedReader(new InputStreamReader(in));
- String line = inr.readLine();
- while (line != null && lines.size() < max) {
- line = line.toLowerCase().trim();
- lines.add(line);
- line = inr.readLine();
- }
-
- proc.waitFor();
- if (proc.exitValue() != 0) {
- // os command problem, throw exception
- throw new IOException(
- "Command line returned OS error code '" + proc.exitValue() +
- "' for command " + Arrays.asList(cmdAttribs));
- }
- if (lines.size() == 0) {
- // unknown problem, throw exception
- throw new IOException(
- "Command line did not return any info " +
- "for command " + Arrays.asList(cmdAttribs));
- }
- return lines;
-
- } catch (InterruptedException ex) {
- throw new IOException(
- "Command line threw an InterruptedException '" + ex.getMessage() +
- "' for command " + Arrays.asList(cmdAttribs));
- } finally {
- IOUtils.closeQuietly(in);
- IOUtils.closeQuietly(out);
- IOUtils.closeQuietly(err);
- IOUtils.closeQuietly(inr);
- if (proc != null) {
- proc.destroy();
- }
- }
- }
-
- /**
- * Opens the process to the operating system.
- *
- * @param cmdAttribs the command line parameters
- * @return the process
- * @throws IOException if an error occurs
- */
- Process openProcess(String[] cmdAttribs) throws IOException {
- return Runtime.getRuntime().exec(cmdAttribs);
- }
-
-}
diff --git a/src/org/apache/commons/io/FileUtils.java b/src/org/apache/commons/io/FileUtils.java
deleted file mode 100644
index 254800cd1..000000000
--- a/src/org/apache/commons/io/FileUtils.java
+++ /dev/null
@@ -1,1890 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.zip.CRC32;
-import java.util.zip.CheckedInputStream;
-import java.util.zip.Checksum;
-
-import org.apache.commons.io.filefilter.DirectoryFileFilter;
-import org.apache.commons.io.filefilter.FalseFileFilter;
-import org.apache.commons.io.filefilter.FileFilterUtils;
-import org.apache.commons.io.filefilter.IOFileFilter;
-import org.apache.commons.io.filefilter.SuffixFileFilter;
-import org.apache.commons.io.filefilter.TrueFileFilter;
-import org.apache.commons.io.output.NullOutputStream;
-
-/**
- * General file manipulation utilities.
- *
- * Facilities are provided in the following areas:
- *
- * - writing to a file
- *
- reading from a file
- *
- make a directory including parent directories
- *
- copying files and directories
- *
- deleting files and directories
- *
- converting to and from a URL
- *
- listing files and directories by filter and extension
- *
- comparing file content
- *
- file last changed date
- *
- calculating a checksum
- *
- *
- * Origin of code: Excalibur, Alexandria, Commons-Utils
- *
- * @author Kevin A. Burton
- * @author Scott Sanders
- * @author Daniel Rall
- * @author Christoph.Reck
- * @author Peter Donald
- * @author Jeff Turner
- * @author Matthew Hawthorne
- * @author Jeremias Maerki
- * @author Stephen Colebourne
- * @author Ian Springer
- * @author Chris Eldredge
- * @author Jim Harrington
- * @author Niall Pemberton
- * @author Sandy McArthur
- * @version $Id: FileUtils.java 610810 2008-01-10 15:04:49Z niallp $
- */
-public class FileUtils {
-
- /**
- * Instances should NOT be constructed in standard programming.
- */
- public FileUtils() {
- super();
- }
-
- /**
- * The number of bytes in a kilobyte.
- */
- public static final long ONE_KB = 1024;
-
- /**
- * The number of bytes in a megabyte.
- */
- public static final long ONE_MB = ONE_KB * ONE_KB;
-
- /**
- * The number of bytes in a gigabyte.
- */
- public static final long ONE_GB = ONE_KB * ONE_MB;
-
- /**
- * An empty array of type File
.
- */
- public static final File[] EMPTY_FILE_ARRAY = new File[0];
-
- //-----------------------------------------------------------------------
- /**
- * Opens a {@link FileInputStream} for the specified file, providing better
- * error messages than simply calling new FileInputStream(file)
.
- *
- * At the end of the method either the stream will be successfully opened,
- * or an exception will have been thrown.
- *
- * An exception is thrown if the file does not exist.
- * An exception is thrown if the file object exists but is a directory.
- * An exception is thrown if the file exists but cannot be read.
- *
- * @param file the file to open for input, must not be null
- * @return a new {@link FileInputStream} for the specified file
- * @throws FileNotFoundException if the file does not exist
- * @throws IOException if the file object is a directory
- * @throws IOException if the file cannot be read
- * @since Commons IO 1.3
- */
- public static FileInputStream openInputStream(File file) throws IOException {
- if (file.exists()) {
- if (file.isDirectory()) {
- throw new IOException("File '" + file + "' exists but is a directory");
- }
- if (file.canRead() == false) {
- throw new IOException("File '" + file + "' cannot be read");
- }
- } else {
- throw new FileNotFoundException("File '" + file + "' does not exist");
- }
- return new FileInputStream(file);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Opens a {@link FileOutputStream} for the specified file, checking and
- * creating the parent directory if it does not exist.
- *
- * At the end of the method either the stream will be successfully opened,
- * or an exception will have been thrown.
- *
- * The parent directory will be created if it does not exist.
- * The file will be created if it does not exist.
- * An exception is thrown if the file object exists but is a directory.
- * An exception is thrown if the file exists but cannot be written to.
- * An exception is thrown if the parent directory cannot be created.
- *
- * @param file the file to open for output, must not be null
- * @return a new {@link FileOutputStream} for the specified file
- * @throws IOException if the file object is a directory
- * @throws IOException if the file cannot be written to
- * @throws IOException if a parent directory needs creating but that fails
- * @since Commons IO 1.3
- */
- public static FileOutputStream openOutputStream(File file) throws IOException {
- if (file.exists()) {
- if (file.isDirectory()) {
- throw new IOException("File '" + file + "' exists but is a directory");
- }
- if (file.canWrite() == false) {
- throw new IOException("File '" + file + "' cannot be written to");
- }
- } else {
- File parent = file.getParentFile();
- if (parent != null && parent.exists() == false) {
- if (parent.mkdirs() == false) {
- throw new IOException("File '" + file + "' could not be created");
- }
- }
- }
- return new FileOutputStream(file);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns a human-readable version of the file size, where the input
- * represents a specific number of bytes.
- *
- * @param size the number of bytes
- * @return a human-readable display value (includes units)
- */
- public static String byteCountToDisplaySize(long size) {
- String displaySize;
-
- if (size / ONE_GB > 0) {
- displaySize = String.valueOf(size / ONE_GB) + " GB";
- } else if (size / ONE_MB > 0) {
- displaySize = String.valueOf(size / ONE_MB) + " MB";
- } else if (size / ONE_KB > 0) {
- displaySize = String.valueOf(size / ONE_KB) + " KB";
- } else {
- displaySize = String.valueOf(size) + " bytes";
- }
- return displaySize;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Implements the same behaviour as the "touch" utility on Unix. It creates
- * a new file with size 0 or, if the file exists already, it is opened and
- * closed without modifying it, but updating the file date and time.
- *
- * NOTE: As from v1.3, this method throws an IOException if the last
- * modified date of the file cannot be set. Also, as from v1.3 this method
- * creates parent directories if they do not exist.
- *
- * @param file the File to touch
- * @throws IOException If an I/O problem occurs
- */
- public static void touch(File file) throws IOException {
- if (!file.exists()) {
- OutputStream out = openOutputStream(file);
- IOUtils.closeQuietly(out);
- }
- boolean success = file.setLastModified(System.currentTimeMillis());
- if (!success) {
- throw new IOException("Unable to set the last modification time for " + file);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Converts a Collection containing java.io.File instanced into array
- * representation. This is to account for the difference between
- * File.listFiles() and FileUtils.listFiles().
- *
- * @param files a Collection containing java.io.File instances
- * @return an array of java.io.File
- */
- public static File[] convertFileCollectionToFileArray(Collection files) {
- return (File[]) files.toArray(new File[files.size()]);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Finds files within a given directory (and optionally its
- * subdirectories). All files found are filtered by an IOFileFilter.
- *
- * @param files the collection of files found.
- * @param directory the directory to search in.
- * @param filter the filter to apply to files and directories.
- */
- private static void innerListFiles(Collection files, File directory,
- IOFileFilter filter) {
- File[] found = directory.listFiles((FileFilter) filter);
- if (found != null) {
- for (int i = 0; i < found.length; i++) {
- if (found[i].isDirectory()) {
- innerListFiles(files, found[i], filter);
- } else {
- files.add(found[i]);
- }
- }
- }
- }
-
- /**
- * Finds files within a given directory (and optionally its
- * subdirectories). All files found are filtered by an IOFileFilter.
- *
- * If your search should recurse into subdirectories you can pass in
- * an IOFileFilter for directories. You don't need to bind a
- * DirectoryFileFilter (via logical AND) to this filter. This method does
- * that for you.
- *
- * An example: If you want to search through all directories called
- * "temp" you pass in FileFilterUtils.NameFileFilter("temp")
- *
- * Another common usage of this method is find files in a directory
- * tree but ignoring the directories generated CVS. You can simply pass
- * in FileFilterUtils.makeCVSAware(null)
.
- *
- * @param directory the directory to search in
- * @param fileFilter filter to apply when finding files.
- * @param dirFilter optional filter to apply when finding subdirectories.
- * If this parameter is null
, subdirectories will not be included in the
- * search. Use TrueFileFilter.INSTANCE to match all directories.
- * @return an collection of java.io.File with the matching files
- * @see org.apache.commons.io.filefilter.FileFilterUtils
- * @see org.apache.commons.io.filefilter.NameFileFilter
- */
- public static Collection listFiles(
- File directory, IOFileFilter fileFilter, IOFileFilter dirFilter) {
- if (!directory.isDirectory()) {
- throw new IllegalArgumentException(
- "Parameter 'directory' is not a directory");
- }
- if (fileFilter == null) {
- throw new NullPointerException("Parameter 'fileFilter' is null");
- }
-
- //Setup effective file filter
- IOFileFilter effFileFilter = FileFilterUtils.andFileFilter(fileFilter,
- FileFilterUtils.notFileFilter(DirectoryFileFilter.INSTANCE));
-
- //Setup effective directory filter
- IOFileFilter effDirFilter;
- if (dirFilter == null) {
- effDirFilter = FalseFileFilter.INSTANCE;
- } else {
- effDirFilter = FileFilterUtils.andFileFilter(dirFilter,
- DirectoryFileFilter.INSTANCE);
- }
-
- //Find files
- Collection files = new java.util.LinkedList();
- innerListFiles(files, directory,
- FileFilterUtils.orFileFilter(effFileFilter, effDirFilter));
- return files;
- }
-
- /**
- * Allows iteration over the files in given directory (and optionally
- * its subdirectories).
- *
- * All files found are filtered by an IOFileFilter. This method is
- * based on {@link #listFiles(File, IOFileFilter, IOFileFilter)}.
- *
- * @param directory the directory to search in
- * @param fileFilter filter to apply when finding files.
- * @param dirFilter optional filter to apply when finding subdirectories.
- * If this parameter is null
, subdirectories will not be included in the
- * search. Use TrueFileFilter.INSTANCE to match all directories.
- * @return an iterator of java.io.File for the matching files
- * @see org.apache.commons.io.filefilter.FileFilterUtils
- * @see org.apache.commons.io.filefilter.NameFileFilter
- * @since Commons IO 1.2
- */
- public static Iterator iterateFiles(
- File directory, IOFileFilter fileFilter, IOFileFilter dirFilter) {
- return listFiles(directory, fileFilter, dirFilter).iterator();
- }
-
- //-----------------------------------------------------------------------
- /**
- * Converts an array of file extensions to suffixes for use
- * with IOFileFilters.
- *
- * @param extensions an array of extensions. Format: {"java", "xml"}
- * @return an array of suffixes. Format: {".java", ".xml"}
- */
- private static String[] toSuffixes(String[] extensions) {
- String[] suffixes = new String[extensions.length];
- for (int i = 0; i < extensions.length; i++) {
- suffixes[i] = "." + extensions[i];
- }
- return suffixes;
- }
-
-
- /**
- * Finds files within a given directory (and optionally its subdirectories)
- * which match an array of extensions.
- *
- * @param directory the directory to search in
- * @param extensions an array of extensions, ex. {"java","xml"}. If this
- * parameter is null
, all files are returned.
- * @param recursive if true all subdirectories are searched as well
- * @return an collection of java.io.File with the matching files
- */
- public static Collection listFiles(
- File directory, String[] extensions, boolean recursive) {
- IOFileFilter filter;
- if (extensions == null) {
- filter = TrueFileFilter.INSTANCE;
- } else {
- String[] suffixes = toSuffixes(extensions);
- filter = new SuffixFileFilter(suffixes);
- }
- return listFiles(directory, filter,
- (recursive ? TrueFileFilter.INSTANCE : FalseFileFilter.INSTANCE));
- }
-
- /**
- * Allows iteration over the files in a given directory (and optionally
- * its subdirectories) which match an array of extensions. This method
- * is based on {@link #listFiles(File, String[], boolean)}.
- *
- * @param directory the directory to search in
- * @param extensions an array of extensions, ex. {"java","xml"}. If this
- * parameter is null
, all files are returned.
- * @param recursive if true all subdirectories are searched as well
- * @return an iterator of java.io.File with the matching files
- * @since Commons IO 1.2
- */
- public static Iterator iterateFiles(
- File directory, String[] extensions, boolean recursive) {
- return listFiles(directory, extensions, recursive).iterator();
- }
-
- //-----------------------------------------------------------------------
- /**
- * Compares the contents of two files to determine if they are equal or not.
- *
- * This method checks to see if the two files are different lengths
- * or if they point to the same file, before resorting to byte-by-byte
- * comparison of the contents.
- *
- * Code origin: Avalon
- *
- * @param file1 the first file
- * @param file2 the second file
- * @return true if the content of the files are equal or they both don't
- * exist, false otherwise
- * @throws IOException in case of an I/O error
- */
- public static boolean contentEquals(File file1, File file2) throws IOException {
- boolean file1Exists = file1.exists();
- if (file1Exists != file2.exists()) {
- return false;
- }
-
- if (!file1Exists) {
- // two not existing files are equal
- return true;
- }
-
- if (file1.isDirectory() || file2.isDirectory()) {
- // don't want to compare directory contents
- throw new IOException("Can't compare directories, only files");
- }
-
- if (file1.length() != file2.length()) {
- // lengths differ, cannot be equal
- return false;
- }
-
- if (file1.getCanonicalFile().equals(file2.getCanonicalFile())) {
- // same file
- return true;
- }
-
- InputStream input1 = null;
- InputStream input2 = null;
- try {
- input1 = new FileInputStream(file1);
- input2 = new FileInputStream(file2);
- return IOUtils.contentEquals(input1, input2);
-
- } finally {
- IOUtils.closeQuietly(input1);
- IOUtils.closeQuietly(input2);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Convert from a URL
to a File
.
- *
- * From version 1.1 this method will decode the URL.
- * Syntax such as file:///my%20docs/file.txt
will be
- * correctly decoded to /my docs/file.txt
.
- *
- * @param url the file URL to convert, null
returns null
- * @return the equivalent File
object, or null
- * if the URL's protocol is not file
- * @throws IllegalArgumentException if the file is incorrectly encoded
- */
- public static File toFile(URL url) {
- if (url == null || !url.getProtocol().equals("file")) {
- return null;
- } else {
- String filename = url.getFile().replace('/', File.separatorChar);
- int pos =0;
- while ((pos = filename.indexOf('%', pos)) >= 0) {
- if (pos + 2 < filename.length()) {
- String hexStr = filename.substring(pos + 1, pos + 3);
- char ch = (char) Integer.parseInt(hexStr, 16);
- filename = filename.substring(0, pos) + ch + filename.substring(pos + 3);
- }
- }
- return new File(filename);
- }
- }
-
- /**
- * Converts each of an array of URL
to a File
.
- *
- * Returns an array of the same size as the input.
- * If the input is null
, an empty array is returned.
- * If the input contains null
, the output array contains null
at the same
- * index.
- *
- * This method will decode the URL.
- * Syntax such as file:///my%20docs/file.txt
will be
- * correctly decoded to /my docs/file.txt
.
- *
- * @param urls the file URLs to convert, null
returns empty array
- * @return a non-null
array of Files matching the input, with a null
item
- * if there was a null
at that index in the input array
- * @throws IllegalArgumentException if any file is not a URL file
- * @throws IllegalArgumentException if any file is incorrectly encoded
- * @since Commons IO 1.1
- */
- public static File[] toFiles(URL[] urls) {
- if (urls == null || urls.length == 0) {
- return EMPTY_FILE_ARRAY;
- }
- File[] files = new File[urls.length];
- for (int i = 0; i < urls.length; i++) {
- URL url = urls[i];
- if (url != null) {
- if (url.getProtocol().equals("file") == false) {
- throw new IllegalArgumentException(
- "URL could not be converted to a File: " + url);
- }
- files[i] = toFile(url);
- }
- }
- return files;
- }
-
- /**
- * Converts each of an array of File
to a URL
.
- *
- * Returns an array of the same size as the input.
- *
- * @param files the files to convert
- * @return an array of URLs matching the input
- * @throws IOException if a file cannot be converted
- */
- public static URL[] toURLs(File[] files) throws IOException {
- URL[] urls = new URL[files.length];
-
- for (int i = 0; i < urls.length; i++) {
- urls[i] = files[i].toURL();
- }
-
- return urls;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Copies a file to a directory preserving the file date.
- *
- * This method copies the contents of the specified source file
- * to a file of the same name in the specified destination directory.
- * The destination directory is created if it does not exist.
- * If the destination file exists, then this method will overwrite it.
- *
- * @param srcFile an existing file to copy, must not be null
- * @param destDir the directory to place the copy in, must not be null
- *
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs during copying
- * @see #copyFile(File, File, boolean)
- */
- public static void copyFileToDirectory(File srcFile, File destDir) throws IOException {
- copyFileToDirectory(srcFile, destDir, true);
- }
-
- /**
- * Copies a file to a directory optionally preserving the file date.
- *
- * This method copies the contents of the specified source file
- * to a file of the same name in the specified destination directory.
- * The destination directory is created if it does not exist.
- * If the destination file exists, then this method will overwrite it.
- *
- * @param srcFile an existing file to copy, must not be null
- * @param destDir the directory to place the copy in, must not be null
- * @param preserveFileDate true if the file date of the copy
- * should be the same as the original
- *
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs during copying
- * @see #copyFile(File, File, boolean)
- * @since Commons IO 1.3
- */
- public static void copyFileToDirectory(File srcFile, File destDir, boolean preserveFileDate) throws IOException {
- if (destDir == null) {
- throw new NullPointerException("Destination must not be null");
- }
- if (destDir.exists() && destDir.isDirectory() == false) {
- throw new IllegalArgumentException("Destination '" + destDir + "' is not a directory");
- }
- copyFile(srcFile, new File(destDir, srcFile.getName()), preserveFileDate);
- }
-
- /**
- * Copies a file to a new location preserving the file date.
- *
- * This method copies the contents of the specified source file to the
- * specified destination file. The directory holding the destination file is
- * created if it does not exist. If the destination file exists, then this
- * method will overwrite it.
- *
- * @param srcFile an existing file to copy, must not be null
- * @param destFile the new file, must not be null
- *
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs during copying
- * @see #copyFileToDirectory(File, File)
- */
- public static void copyFile(File srcFile, File destFile) throws IOException {
- copyFile(srcFile, destFile, true);
- }
-
- /**
- * Copies a file to a new location.
- *
- * This method copies the contents of the specified source file
- * to the specified destination file.
- * The directory holding the destination file is created if it does not exist.
- * If the destination file exists, then this method will overwrite it.
- *
- * @param srcFile an existing file to copy, must not be null
- * @param destFile the new file, must not be null
- * @param preserveFileDate true if the file date of the copy
- * should be the same as the original
- *
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs during copying
- * @see #copyFileToDirectory(File, File, boolean)
- */
- public static void copyFile(File srcFile, File destFile,
- boolean preserveFileDate) throws IOException {
- if (srcFile == null) {
- throw new NullPointerException("Source must not be null");
- }
- if (destFile == null) {
- throw new NullPointerException("Destination must not be null");
- }
- if (srcFile.exists() == false) {
- throw new FileNotFoundException("Source '" + srcFile + "' does not exist");
- }
- if (srcFile.isDirectory()) {
- throw new IOException("Source '" + srcFile + "' exists but is a directory");
- }
- if (srcFile.getCanonicalPath().equals(destFile.getCanonicalPath())) {
- throw new IOException("Source '" + srcFile + "' and destination '" + destFile + "' are the same");
- }
- if (destFile.getParentFile() != null && destFile.getParentFile().exists() == false) {
- if (destFile.getParentFile().mkdirs() == false) {
- throw new IOException("Destination '" + destFile + "' directory cannot be created");
- }
- }
- if (destFile.exists() && destFile.canWrite() == false) {
- throw new IOException("Destination '" + destFile + "' exists but is read-only");
- }
- doCopyFile(srcFile, destFile, preserveFileDate);
- }
-
- /**
- * Internal copy file method.
- *
- * @param srcFile the validated source file, must not be null
- * @param destFile the validated destination file, must not be null
- * @param preserveFileDate whether to preserve the file date
- * @throws IOException if an error occurs
- */
- private static void doCopyFile(File srcFile, File destFile, boolean preserveFileDate) throws IOException {
- if (destFile.exists() && destFile.isDirectory()) {
- throw new IOException("Destination '" + destFile + "' exists but is a directory");
- }
-
- FileInputStream input = new FileInputStream(srcFile);
- try {
- FileOutputStream output = new FileOutputStream(destFile);
- try {
- IOUtils.copy(input, output);
- } finally {
- IOUtils.closeQuietly(output);
- }
- } finally {
- IOUtils.closeQuietly(input);
- }
-
- if (srcFile.length() != destFile.length()) {
- throw new IOException("Failed to copy full contents from '" +
- srcFile + "' to '" + destFile + "'");
- }
- if (preserveFileDate) {
- destFile.setLastModified(srcFile.lastModified());
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Copies a directory to within another directory preserving the file dates.
- *
- * This method copies the source directory and all its contents to a
- * directory of the same name in the specified destination directory.
- *
- * The destination directory is created if it does not exist.
- * If the destination directory did exist, then this method merges
- * the source with the destination, with the source taking precedence.
- *
- * @param srcDir an existing directory to copy, must not be null
- * @param destDir the directory to place the copy in, must not be null
- *
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs during copying
- * @since Commons IO 1.2
- */
- public static void copyDirectoryToDirectory(File srcDir, File destDir) throws IOException {
- if (srcDir == null) {
- throw new NullPointerException("Source must not be null");
- }
- if (srcDir.exists() && srcDir.isDirectory() == false) {
- throw new IllegalArgumentException("Source '" + destDir + "' is not a directory");
- }
- if (destDir == null) {
- throw new NullPointerException("Destination must not be null");
- }
- if (destDir.exists() && destDir.isDirectory() == false) {
- throw new IllegalArgumentException("Destination '" + destDir + "' is not a directory");
- }
- copyDirectory(srcDir, new File(destDir, srcDir.getName()), true);
- }
-
- /**
- * Copies a whole directory to a new location preserving the file dates.
- *
- * This method copies the specified directory and all its child
- * directories and files to the specified destination.
- * The destination is the new location and name of the directory.
- *
- * The destination directory is created if it does not exist.
- * If the destination directory did exist, then this method merges
- * the source with the destination, with the source taking precedence.
- *
- * @param srcDir an existing directory to copy, must not be null
- * @param destDir the new directory, must not be null
- *
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs during copying
- * @since Commons IO 1.1
- */
- public static void copyDirectory(File srcDir, File destDir) throws IOException {
- copyDirectory(srcDir, destDir, true);
- }
-
- /**
- * Copies a whole directory to a new location.
- *
- * This method copies the contents of the specified source directory
- * to within the specified destination directory.
- *
- * The destination directory is created if it does not exist.
- * If the destination directory did exist, then this method merges
- * the source with the destination, with the source taking precedence.
- *
- * @param srcDir an existing directory to copy, must not be null
- * @param destDir the new directory, must not be null
- * @param preserveFileDate true if the file date of the copy
- * should be the same as the original
- *
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs during copying
- * @since Commons IO 1.1
- */
- public static void copyDirectory(File srcDir, File destDir,
- boolean preserveFileDate) throws IOException {
- copyDirectory(srcDir, destDir, null, preserveFileDate);
- }
-
- /**
- * Copies a filtered directory to a new location preserving the file dates.
- *
- * This method copies the contents of the specified source directory
- * to within the specified destination directory.
- *
- * The destination directory is created if it does not exist.
- * If the destination directory did exist, then this method merges
- * the source with the destination, with the source taking precedence.
- *
- *
Example: Copy directories only
- *
- * // only copy the directory structure
- * FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY);
- *
- *
- * Example: Copy directories and txt files
- *
- * // Create a filter for ".txt" files
- * IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
- * IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, txtSuffixFilter);
- *
- * // Create a filter for either directories or ".txt" files
- * FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);
- *
- * // Copy using the filter
- * FileUtils.copyDirectory(srcDir, destDir, filter);
- *
- *
- * @param srcDir an existing directory to copy, must not be null
- * @param destDir the new directory, must not be null
- * @param filter the filter to apply, null means copy all directories and files
- * should be the same as the original
- *
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs during copying
- * @since Commons IO 1.4
- */
- public static void copyDirectory(File srcDir, File destDir,
- FileFilter filter) throws IOException {
- copyDirectory(srcDir, destDir, filter, true);
- }
-
- /**
- * Copies a filtered directory to a new location.
- *
- * This method copies the contents of the specified source directory
- * to within the specified destination directory.
- *
- * The destination directory is created if it does not exist.
- * If the destination directory did exist, then this method merges
- * the source with the destination, with the source taking precedence.
- *
- *
Example: Copy directories only
- *
- * // only copy the directory structure
- * FileUtils.copyDirectory(srcDir, destDir, DirectoryFileFilter.DIRECTORY, false);
- *
- *
- * Example: Copy directories and txt files
- *
- * // Create a filter for ".txt" files
- * IOFileFilter txtSuffixFilter = FileFilterUtils.suffixFileFilter(".txt");
- * IOFileFilter txtFiles = FileFilterUtils.andFileFilter(FileFileFilter.FILE, txtSuffixFilter);
- *
- * // Create a filter for either directories or ".txt" files
- * FileFilter filter = FileFilterUtils.orFileFilter(DirectoryFileFilter.DIRECTORY, txtFiles);
- *
- * // Copy using the filter
- * FileUtils.copyDirectory(srcDir, destDir, filter, false);
- *
- *
- * @param srcDir an existing directory to copy, must not be null
- * @param destDir the new directory, must not be null
- * @param filter the filter to apply, null means copy all directories and files
- * @param preserveFileDate true if the file date of the copy
- * should be the same as the original
- *
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs during copying
- * @since Commons IO 1.4
- */
- public static void copyDirectory(File srcDir, File destDir,
- FileFilter filter, boolean preserveFileDate) throws IOException {
- if (srcDir == null) {
- throw new NullPointerException("Source must not be null");
- }
- if (destDir == null) {
- throw new NullPointerException("Destination must not be null");
- }
- if (srcDir.exists() == false) {
- throw new FileNotFoundException("Source '" + srcDir + "' does not exist");
- }
- if (srcDir.isDirectory() == false) {
- throw new IOException("Source '" + srcDir + "' exists but is not a directory");
- }
- if (srcDir.getCanonicalPath().equals(destDir.getCanonicalPath())) {
- throw new IOException("Source '" + srcDir + "' and destination '" + destDir + "' are the same");
- }
-
- // Cater for destination being directory within the source directory (see IO-141)
- List exclusionList = null;
- if (destDir.getCanonicalPath().startsWith(srcDir.getCanonicalPath())) {
- File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter);
- if (srcFiles != null && srcFiles.length > 0) {
- exclusionList = new ArrayList(srcFiles.length);
- for (int i = 0; i < srcFiles.length; i++) {
- File copiedFile = new File(destDir, srcFiles[i].getName());
- exclusionList.add(copiedFile.getCanonicalPath());
- }
- }
- }
- doCopyDirectory(srcDir, destDir, filter, preserveFileDate, exclusionList);
- }
-
- /**
- * Internal copy directory method.
- *
- * @param srcDir the validated source directory, must not be null
- * @param destDir the validated destination directory, must not be null
- * @param filter the filter to apply, null means copy all directories and files
- * @param preserveFileDate whether to preserve the file date
- * @param exclusionList List of files and directories to exclude from the copy, may be null
- * @throws IOException if an error occurs
- * @since Commons IO 1.1
- */
- private static void doCopyDirectory(File srcDir, File destDir, FileFilter filter,
- boolean preserveFileDate, List exclusionList) throws IOException {
- if (destDir.exists()) {
- if (destDir.isDirectory() == false) {
- throw new IOException("Destination '" + destDir + "' exists but is not a directory");
- }
- } else {
- if (destDir.mkdirs() == false) {
- throw new IOException("Destination '" + destDir + "' directory cannot be created");
- }
- if (preserveFileDate) {
- destDir.setLastModified(srcDir.lastModified());
- }
- }
- if (destDir.canWrite() == false) {
- throw new IOException("Destination '" + destDir + "' cannot be written to");
- }
- // recurse
- File[] files = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter);
- if (files == null) { // null if security restricted
- throw new IOException("Failed to list contents of " + srcDir);
- }
- for (int i = 0; i < files.length; i++) {
- File copiedFile = new File(destDir, files[i].getName());
- if (exclusionList == null || !exclusionList.contains(files[i].getCanonicalPath())) {
- if (files[i].isDirectory()) {
- doCopyDirectory(files[i], copiedFile, filter, preserveFileDate, exclusionList);
- } else {
- doCopyFile(files[i], copiedFile, preserveFileDate);
- }
- }
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Copies bytes from the URL source
to a file
- * destination
. The directories up to destination
- * will be created if they don't already exist. destination
- * will be overwritten if it already exists.
- *
- * @param source the URL
to copy bytes from, must not be null
- * @param destination the non-directory File
to write bytes to
- * (possibly overwriting), must not be null
- * @throws IOException if source
URL cannot be opened
- * @throws IOException if destination
is a directory
- * @throws IOException if destination
cannot be written
- * @throws IOException if destination
needs creating but can't be
- * @throws IOException if an IO error occurs during copying
- */
- public static void copyURLToFile(URL source, File destination) throws IOException {
- InputStream input = source.openStream();
- try {
- FileOutputStream output = openOutputStream(destination);
- try {
- IOUtils.copy(input, output);
- } finally {
- IOUtils.closeQuietly(output);
- }
- } finally {
- IOUtils.closeQuietly(input);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Deletes a directory recursively.
- *
- * @param directory directory to delete
- * @throws IOException in case deletion is unsuccessful
- */
- public static void deleteDirectory(File directory) throws IOException {
- if (!directory.exists()) {
- return;
- }
-
- cleanDirectory(directory);
- if (!directory.delete()) {
- String message =
- "Unable to delete directory " + directory + ".";
- throw new IOException(message);
- }
- }
-
- /**
- * Deletes a file, never throwing an exception. If file is a directory, delete it and all sub-directories.
- *
- * The difference between File.delete() and this method are:
- *
- * - A directory to be deleted does not have to be empty.
- * - No exceptions are thrown when a file or directory cannot be deleted.
- *
- *
- * @param file file or directory to delete, can be null
- * @return true
if the file or directory was deleted, otherwise
- * false
- *
- * @since Commons IO 1.4
- */
- public static boolean deleteQuietly(File file) {
- if (file == null) {
- return false;
- }
- try {
- if (file.isDirectory()) {
- cleanDirectory(file);
- }
- } catch (Exception e) {
- }
-
- try {
- return file.delete();
- } catch (Exception e) {
- return false;
- }
- }
-
- /**
- * Cleans a directory without deleting it.
- *
- * @param directory directory to clean
- * @throws IOException in case cleaning is unsuccessful
- */
- public static void cleanDirectory(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 {
- forceDelete(file);
- } catch (IOException ioe) {
- exception = ioe;
- }
- }
-
- if (null != exception) {
- throw exception;
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Waits for NFS to propagate a file creation, imposing a timeout.
- *
- * This method repeatedly tests {@link File#exists()} until it returns
- * true up to the maximum time specified in seconds.
- *
- * @param file the file to check, must not be null
- * @param seconds the maximum time in seconds to wait
- * @return true if file exists
- * @throws NullPointerException if the file is null
- */
- public static boolean waitFor(File file, int seconds) {
- int timeout = 0;
- int tick = 0;
- while (!file.exists()) {
- if (tick++ >= 10) {
- tick = 0;
- if (timeout++ > seconds) {
- return false;
- }
- }
- try {
- Thread.sleep(100);
- } catch (InterruptedException ignore) {
- // ignore exception
- } catch (Exception ex) {
- break;
- }
- }
- return true;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Reads the contents of a file into a String.
- * The file is always closed.
- *
- * @param file the file to read, must not be null
- * @param encoding the encoding to use, null
means platform default
- * @return the file contents, never null
- * @throws IOException in case of an I/O error
- * @throws java.io.UnsupportedEncodingException if the encoding is not supported by the VM
- */
- public static String readFileToString(File file, String encoding) throws IOException {
- InputStream in = null;
- try {
- in = openInputStream(file);
- return IOUtils.toString(in, encoding);
- } finally {
- IOUtils.closeQuietly(in);
- }
- }
-
-
- /**
- * Reads the contents of a file into a String using the default encoding for the VM.
- * The file is always closed.
- *
- * @param file the file to read, must not be null
- * @return the file contents, never null
- * @throws IOException in case of an I/O error
- * @since Commons IO 1.3.1
- */
- public static String readFileToString(File file) throws IOException {
- return readFileToString(file, null);
- }
-
- /**
- * Reads the contents of a file into a byte array.
- * The file is always closed.
- *
- * @param file the file to read, must not be null
- * @return the file contents, never null
- * @throws IOException in case of an I/O error
- * @since Commons IO 1.1
- */
- public static byte[] readFileToByteArray(File file) throws IOException {
- InputStream in = null;
- try {
- in = openInputStream(file);
- return IOUtils.toByteArray(in);
- } finally {
- IOUtils.closeQuietly(in);
- }
- }
-
- /**
- * Reads the contents of a file line by line to a List of Strings.
- * The file is always closed.
- *
- * @param file the file to read, must not be null
- * @param encoding the encoding to use, null
means platform default
- * @return the list of Strings representing each line in the file, never null
- * @throws IOException in case of an I/O error
- * @throws java.io.UnsupportedEncodingException if the encoding is not supported by the VM
- * @since Commons IO 1.1
- */
- public static List readLines(File file, String encoding) throws IOException {
- InputStream in = null;
- try {
- in = openInputStream(file);
- return IOUtils.readLines(in, encoding);
- } finally {
- IOUtils.closeQuietly(in);
- }
- }
-
- /**
- * Reads the contents of a file line by line to a List of Strings using the default encoding for the VM.
- * The file is always closed.
- *
- * @param file the file to read, must not be null
- * @return the list of Strings representing each line in the file, never null
- * @throws IOException in case of an I/O error
- * @since Commons IO 1.3
- */
- public static List readLines(File file) throws IOException {
- return readLines(file, null);
- }
-
- /**
- * Returns an Iterator for the lines in a File
.
- *
- * This method opens an InputStream
for the file.
- * When you have finished with the iterator you should close the stream
- * to free internal resources. This can be done by calling the
- * {@link LineIterator#close()} or
- * {@link LineIterator#closeQuietly(LineIterator)} method.
- *
- * The recommended usage pattern is:
- *
- * LineIterator it = FileUtils.lineIterator(file, "UTF-8");
- * try {
- * while (it.hasNext()) {
- * String line = it.nextLine();
- * /// do something with line
- * }
- * } finally {
- * LineIterator.closeQuietly(iterator);
- * }
- *
- *
- * If an exception occurs during the creation of the iterator, the
- * underlying stream is closed.
- *
- * @param file the file to open for input, must not be null
- * @param encoding the encoding to use, null
means platform default
- * @return an Iterator of the lines in the file, never null
- * @throws IOException in case of an I/O error (file closed)
- * @since Commons IO 1.2
- */
- public static LineIterator lineIterator(File file, String encoding) throws IOException {
- InputStream in = null;
- try {
- in = openInputStream(file);
- return IOUtils.lineIterator(in, encoding);
- } catch (IOException ex) {
- IOUtils.closeQuietly(in);
- throw ex;
- } catch (RuntimeException ex) {
- IOUtils.closeQuietly(in);
- throw ex;
- }
- }
-
- /**
- * Returns an Iterator for the lines in a File
using the default encoding for the VM.
- *
- * @param file the file to open for input, must not be null
- * @return an Iterator of the lines in the file, never null
- * @throws IOException in case of an I/O error (file closed)
- * @since Commons IO 1.3
- * @see #lineIterator(File, String)
- */
- public static LineIterator lineIterator(File file) throws IOException {
- return lineIterator(file, null);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Writes a String to a file creating the file if it does not exist.
- *
- * NOTE: As from v1.3, the parent directories of the file will be created
- * if they do not exist.
- *
- * @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 java.io.UnsupportedEncodingException if the encoding is not supported by the VM
- */
- public static void writeStringToFile(File file, String data, String encoding) throws IOException {
- OutputStream out = null;
- try {
- out = openOutputStream(file);
- IOUtils.write(data, out, encoding);
- } finally {
- IOUtils.closeQuietly(out);
- }
- }
-
- /**
- * Writes a String to a file creating the file if it does not exist using the default encoding for the VM.
- *
- * @param file the file to write
- * @param data the content to write to the file
- * @throws IOException in case of an I/O error
- */
- public static void writeStringToFile(File file, String data) throws IOException {
- writeStringToFile(file, data, null);
- }
-
- /**
- * Writes a byte array to a file creating the file if it does not exist.
- *
- * NOTE: As from v1.3, the parent directories of the file will be created
- * if they do 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 = null;
- try {
- out = openOutputStream(file);
- out.write(data);
- } finally {
- IOUtils.closeQuietly(out);
- }
- }
-
- /**
- * Writes the toString()
value of each item in a collection to
- * the specified File
line by line.
- * The specified character encoding and the default line ending will be used.
- *
- * NOTE: As from v1.3, the parent directories of the file will be created
- * if they do not exist.
- *
- * @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 java.io.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 toString()
value of each item in a collection to
- * the specified File
line by line.
- * The default VM encoding and the default line ending will be used.
- *
- * @param file the file to write to
- * @param lines the lines to write, null
entries produce blank lines
- * @throws IOException in case of an I/O error
- * @since Commons IO 1.3
- */
- public static void writeLines(File file, Collection lines) throws IOException {
- writeLines(file, null, lines, null);
- }
-
- /**
- * Writes the toString()
value of each item in a collection to
- * the specified File
line by line.
- * The specified character encoding and the line ending will be used.
- *
- * NOTE: As from v1.3, the parent directories of the file will be created
- * if they do not exist.
- *
- * @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 java.io.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 = null;
- try {
- out = openOutputStream(file);
- IOUtils.writeLines(lines, lineEnding, out, encoding);
- } finally {
- IOUtils.closeQuietly(out);
- }
- }
-
- /**
- * Writes the toString()
value of each item in a collection to
- * the specified File
line by line.
- * The default VM encoding and the specified line ending will be used.
- *
- * @param file the file to write to
- * @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
- * @since Commons IO 1.3
- */
- public static void writeLines(File file, Collection lines, String lineEnding) throws IOException {
- writeLines(file, null, lines, lineEnding);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Deletes a file. If file is a directory, delete it and all sub-directories.
- *
- * The difference between File.delete() and this method are:
- *
- * - A directory to be deleted does not have to be empty.
- * - You get exceptions when a file or directory cannot be deleted.
- * (java.io.File methods returns a boolean)
- *
- *
- * @param file file or directory to delete, must not be null
- * @throws NullPointerException if the directory is null
- * @throws FileNotFoundException if the file was not found
- * @throws IOException in case deletion is unsuccessful
- */
- public static void forceDelete(File file) throws IOException {
- if (file.isDirectory()) {
- deleteDirectory(file);
- } else {
- boolean filePresent = file.exists();
- if (!file.delete()) {
- if (!filePresent){
- throw new FileNotFoundException("File does not exist: " + file);
- }
- String message =
- "Unable to delete file: " + file;
- throw new IOException(message);
- }
- }
- }
-
- /**
- * Schedules 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, must not be 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();
- }
- }
-
- /**
- * Schedules a directory recursively for deletion on JVM exit.
- *
- * @param directory directory to delete, must not be 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();
- }
-
- /**
- * Cleans a directory without deleting it.
- *
- * @param directory directory to clean, must not be 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;
- }
- }
-
- /**
- * Makes 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, must not be 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);
- }
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Counts the size of a directory recursively (sum of the length of all files).
- *
- * @param directory directory to inspect, must not be 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 File
is newer than the reference
- * File
.
- *
- * @param file the File
of which the modification date must
- * be compared, must not be null
- * @param reference the File
of which the modification date
- * is used, must not be null
- * @return true if the File
exists and has been modified more
- * recently than the reference File
- * @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 File
is newer than the specified
- * Date
.
- *
- * @param file the File
of which the modification date
- * must be compared, must not be null
- * @param date the date reference, must not be null
- * @return true if the File
exists and has been modified
- * after the given Date
.
- * @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 File
is newer than the specified
- * time reference.
- *
- * @param file the File
of which the modification date must
- * be compared, must not be null
- * @param timeMillis the time reference measured in milliseconds since the
- * epoch (00:00:00 GMT, January 1, 1970)
- * @return true if the File
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;
- }
-
-
- //-----------------------------------------------------------------------
- /**
- * Tests if the specified File
is older than the reference
- * File
.
- *
- * @param file the File
of which the modification date must
- * be compared, must not be null
- * @param reference the File
of which the modification date
- * is used, must not be null
- * @return true if the File
exists and has been modified before
- * the reference File
- * @throws IllegalArgumentException if the file is null
- * @throws IllegalArgumentException if the reference file is null
or doesn't exist
- */
- public static boolean isFileOlder(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 isFileOlder(file, reference.lastModified());
- }
-
- /**
- * Tests if the specified File
is older than the specified
- * Date
.
- *
- * @param file the File
of which the modification date
- * must be compared, must not be null
- * @param date the date reference, must not be null
- * @return true if the File
exists and has been modified
- * before the given Date
.
- * @throws IllegalArgumentException if the file is null
- * @throws IllegalArgumentException if the date is null
- */
- public static boolean isFileOlder(File file, Date date) {
- if (date == null) {
- throw new IllegalArgumentException("No specified date");
- }
- return isFileOlder(file, date.getTime());
- }
-
- /**
- * Tests if the specified File
is older than the specified
- * time reference.
- *
- * @param file the File
of which the modification date must
- * be compared, must not be null
- * @param timeMillis the time reference measured in milliseconds since the
- * epoch (00:00:00 GMT, January 1, 1970)
- * @return true if the File
exists and has been modified before
- * the given time reference.
- * @throws IllegalArgumentException if the file is null
- */
- public static boolean isFileOlder(File file, long timeMillis) {
- if (file == null) {
- throw new IllegalArgumentException("No specified file");
- }
- if (!file.exists()) {
- return false;
- }
- return file.lastModified() < timeMillis;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Computes the checksum of a file using the CRC32 checksum routine.
- * The value of the checksum is returned.
- *
- * @param file the file to checksum, must not be null
- * @return the checksum value
- * @throws NullPointerException if the file or checksum is null
- * @throws IllegalArgumentException if the file is a directory
- * @throws IOException if an IO error occurs reading the file
- * @since Commons IO 1.3
- */
- public static long checksumCRC32(File file) throws IOException {
- CRC32 crc = new CRC32();
- checksum(file, crc);
- return crc.getValue();
- }
-
- /**
- * Computes the checksum of a file using the specified checksum object.
- * Multiple files may be checked using one Checksum
instance
- * if desired simply by reusing the same checksum object.
- * For example:
- *
- * long csum = FileUtils.checksum(file, new CRC32()).getValue();
- *
- *
- * @param file the file to checksum, must not be null
- * @param checksum the checksum object to be used, must not be null
- * @return the checksum specified, updated with the content of the file
- * @throws NullPointerException if the file or checksum is null
- * @throws IllegalArgumentException if the file is a directory
- * @throws IOException if an IO error occurs reading the file
- * @since Commons IO 1.3
- */
- public static Checksum checksum(File file, Checksum checksum) throws IOException {
- if (file.isDirectory()) {
- throw new IllegalArgumentException("Checksums can't be computed on directories");
- }
- InputStream in = null;
- try {
- in = new CheckedInputStream(new FileInputStream(file), checksum);
- IOUtils.copy(in, new NullOutputStream());
- } finally {
- IOUtils.closeQuietly(in);
- }
- return checksum;
- }
-
- /**
- * Moves a directory.
- *
- * When the destination directory is on another file system, do a "copy and delete".
- *
- * @param srcDir the directory to be moved
- * @param destDir the destination directory
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs moving the file
- * @since Commons IO 1.4
- */
- public static void moveDirectory(File srcDir, File destDir) throws IOException {
- if (srcDir == null) {
- throw new NullPointerException("Source must not be null");
- }
- if (destDir == null) {
- throw new NullPointerException("Destination must not be null");
- }
- if (!srcDir.exists()) {
- throw new FileNotFoundException("Source '" + srcDir + "' does not exist");
- }
- if (!srcDir.isDirectory()) {
- throw new IOException("Source '" + srcDir + "' is not a directory");
- }
- if (destDir.exists()) {
- throw new IOException("Destination '" + destDir + "' already exists");
- }
- boolean rename = srcDir.renameTo(destDir);
- if (!rename) {
- copyDirectory( srcDir, destDir );
- deleteDirectory( srcDir );
- if (srcDir.exists()) {
- throw new IOException("Failed to delete original directory '" + srcDir +
- "' after copy to '" + destDir + "'");
- }
- }
- }
-
- /**
- * Moves a directory to another directory.
- *
- * @param src the file to be moved
- * @param destDir the destination file
- * @param createDestDir If true
create the destination directory,
- * otherwise if false
throw an IOException
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs moving the file
- * @since Commons IO 1.4
- */
- public static void moveDirectoryToDirectory(File src, File destDir, boolean createDestDir) throws IOException {
- if (src == null) {
- throw new NullPointerException("Source must not be null");
- }
- if (destDir == null) {
- throw new NullPointerException("Destination directory must not be null");
- }
- if (!destDir.exists() && createDestDir) {
- destDir.mkdirs();
- }
- if (!destDir.exists()) {
- throw new FileNotFoundException("Destination directory '" + destDir +
- "' does not exist [createDestDir=" + createDestDir +"]");
- }
- if (!destDir.isDirectory()) {
- throw new IOException("Destination '" + destDir + "' is not a directory");
- }
- moveDirectory(src, new File(destDir, src.getName()));
-
- }
-
- /**
- * Moves a file.
- *
- * When the destination file is on another file system, do a "copy and delete".
- *
- * @param srcFile the file to be moved
- * @param destFile the destination file
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs moving the file
- * @since Commons IO 1.4
- */
- public static void moveFile(File srcFile, File destFile) throws IOException {
- if (srcFile == null) {
- throw new NullPointerException("Source must not be null");
- }
- if (destFile == null) {
- throw new NullPointerException("Destination must not be null");
- }
- if (!srcFile.exists()) {
- throw new FileNotFoundException("Source '" + srcFile + "' does not exist");
- }
- if (srcFile.isDirectory()) {
- throw new IOException("Source '" + srcFile + "' is a directory");
- }
- if (destFile.exists()) {
- throw new IOException("Destination '" + destFile + "' already exists");
- }
- if (destFile.isDirectory()) {
- throw new IOException("Destination '" + destFile + "' is a directory");
- }
- boolean rename = srcFile.renameTo(destFile);
- if (!rename) {
- copyFile( srcFile, destFile );
- if (!srcFile.delete()) {
- FileUtils.deleteQuietly(destFile);
- throw new IOException("Failed to delete original file '" + srcFile +
- "' after copy to '" + destFile + "'");
- }
- }
- }
-
- /**
- * Moves a file to a directory.
- *
- * @param srcFile the file to be moved
- * @param destDir the destination file
- * @param createDestDir If true
create the destination directory,
- * otherwise if false
throw an IOException
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs moving the file
- * @since Commons IO 1.4
- */
- public static void moveFileToDirectory(File srcFile, File destDir, boolean createDestDir) throws IOException {
- if (srcFile == null) {
- throw new NullPointerException("Source must not be null");
- }
- if (destDir == null) {
- throw new NullPointerException("Destination directory must not be null");
- }
- if (!destDir.exists() && createDestDir) {
- destDir.mkdirs();
- }
- if (!destDir.exists()) {
- throw new FileNotFoundException("Destination directory '" + destDir +
- "' does not exist [createDestDir=" + createDestDir +"]");
- }
- if (!destDir.isDirectory()) {
- throw new IOException("Destination '" + destDir + "' is not a directory");
- }
- moveFile(srcFile, new File(destDir, srcFile.getName()));
- }
-
- /**
- * Moves a file or directory to the destination directory.
- *
- * When the destination is on another file system, do a "copy and delete".
- *
- * @param src the file or directory to be moved
- * @param destDir the destination directory
- * @param createDestDir If true
create the destination directory,
- * otherwise if false
throw an IOException
- * @throws NullPointerException if source or destination is null
- * @throws IOException if source or destination is invalid
- * @throws IOException if an IO error occurs moving the file
- * @since Commons IO 1.4
- */
- public static void moveToDirectory(File src, File destDir, boolean createDestDir) throws IOException {
- if (src == null) {
- throw new NullPointerException("Source must not be null");
- }
- if (destDir == null) {
- throw new NullPointerException("Destination must not be null");
- }
- if (!src.exists()) {
- throw new FileNotFoundException("Source '" + src + "' does not exist");
- }
- if (src.isDirectory()) {
- moveDirectoryToDirectory(src, destDir, createDestDir);
- } else {
- moveFileToDirectory(src, destDir, createDestDir);
- }
- }
-
-}
diff --git a/src/org/apache/commons/io/FilenameUtils.java b/src/org/apache/commons/io/FilenameUtils.java
deleted file mode 100644
index 8e170b147..000000000
--- a/src/org/apache/commons/io/FilenameUtils.java
+++ /dev/null
@@ -1,1260 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Stack;
-
-/**
- * General filename and filepath manipulation utilities.
- *
- * When dealing with filenames you can hit problems when moving from a Windows
- * based development machine to a Unix based production machine.
- * This class aims to help avoid those problems.
- *
- * NOTE: You may be able to avoid using this class entirely simply by
- * using JDK {@link java.io.File File} objects and the two argument constructor
- * {@link java.io.File#File(java.io.File, java.lang.String) File(File,String)}.
- *
- * Most methods on this class are designed to work the same on both Unix and Windows.
- * Those that don't include 'System', 'Unix' or 'Windows' in their name.
- *
- * Most methods recognise both separators (forward and back), and both
- * sets of prefixes. See the javadoc of each method for details.
- *
- * This class defines six components within a filename
- * (example C:\dev\project\file.txt):
- *
- * - the prefix - C:\
- * - the path - dev\project\
- * - the full path - C:\dev\project\
- * - the name - file.txt
- * - the base name - file
- * - the extension - txt
- *
- * Note that this class works best if directory filenames end with a separator.
- * If you omit the last separator, it is impossible to determine if the filename
- * corresponds to a file or a directory. As a result, we have chosen to say
- * it corresponds to a file.
- *
- * This class only supports Unix and Windows style names.
- * Prefixes are matched as follows:
- *
- * Windows:
- * a\b\c.txt --> "" --> relative
- * \a\b\c.txt --> "\" --> current drive absolute
- * C:a\b\c.txt --> "C:" --> drive relative
- * C:\a\b\c.txt --> "C:\" --> absolute
- * \\server\a\b\c.txt --> "\\server\" --> UNC
- *
- * Unix:
- * a/b/c.txt --> "" --> relative
- * /a/b/c.txt --> "/" --> absolute
- * ~/a/b/c.txt --> "~/" --> current user
- * ~ --> "~/" --> current user (slash added)
- * ~user/a/b/c.txt --> "~user/" --> named user
- * ~user --> "~user/" --> named user (slash added)
- *
- * Both prefix styles are matched always, irrespective of the machine that you are
- * currently running on.
- *
- * Origin of code: Excalibur, Alexandria, Tomcat, Commons-Utils.
- *
- * @author Kevin A. Burton
- * @author Scott Sanders
- * @author Daniel Rall
- * @author Christoph.Reck
- * @author Peter Donald
- * @author Jeff Turner
- * @author Matthew Hawthorne
- * @author Martin Cooper
- * @author Jeremias Maerki
- * @author Stephen Colebourne
- * @version $Id: FilenameUtils.java 609870 2008-01-08 04:46:26Z niallp $
- * @since Commons IO 1.1
- */
-public class FilenameUtils {
-
- /**
- * The extension separator character.
- * @since Commons IO 1.4
- */
- public static final char EXTENSION_SEPARATOR = '.';
-
- /**
- * The extension separator String.
- * @since Commons IO 1.4
- */
- public static final String EXTENSION_SEPARATOR_STR = (new Character(EXTENSION_SEPARATOR)).toString();
-
- /**
- * The Unix separator character.
- */
- private static final char UNIX_SEPARATOR = '/';
-
- /**
- * The Windows separator character.
- */
- private static final char WINDOWS_SEPARATOR = '\\';
-
- /**
- * The system separator character.
- */
- private static final char SYSTEM_SEPARATOR = File.separatorChar;
-
- /**
- * The separator character that is the opposite of the system separator.
- */
- private static final char OTHER_SEPARATOR;
- static {
- if (isSystemWindows()) {
- OTHER_SEPARATOR = UNIX_SEPARATOR;
- } else {
- OTHER_SEPARATOR = WINDOWS_SEPARATOR;
- }
- }
-
- /**
- * Instances should NOT be constructed in standard programming.
- */
- public FilenameUtils() {
- super();
- }
-
- //-----------------------------------------------------------------------
- /**
- * Determines if Windows file system is in use.
- *
- * @return true if the system is Windows
- */
- static boolean isSystemWindows() {
- return SYSTEM_SEPARATOR == WINDOWS_SEPARATOR;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks if the character is a separator.
- *
- * @param ch the character to check
- * @return true if it is a separator character
- */
- private static boolean isSeparator(char ch) {
- return (ch == UNIX_SEPARATOR) || (ch == WINDOWS_SEPARATOR);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Normalizes a path, removing double and single dot path steps.
- *
- * This method normalizes a path to a standard format.
- * The input may contain separators in either Unix or Windows format.
- * The output will contain separators in the format of the system.
- *
- * A trailing slash will be retained.
- * A double slash will be merged to a single slash (but UNC names are handled).
- * A single dot path segment will be removed.
- * A double dot will cause that path segment and the one before to be removed.
- * If the double dot has no parent path segment to work with, null
- * is returned.
- *
- * The output will be the same on both Unix and Windows except
- * for the separator character.
- *
- * /foo// --> /foo/
- * /foo/./ --> /foo/
- * /foo/../bar --> /bar
- * /foo/../bar/ --> /bar/
- * /foo/../bar/../baz --> /baz
- * //foo//./bar --> /foo/bar
- * /../ --> null
- * ../foo --> null
- * foo/bar/.. --> foo/
- * foo/../../bar --> null
- * foo/../bar --> bar
- * //server/foo/../bar --> //server/bar
- * //server/../bar --> null
- * C:\foo\..\bar --> C:\bar
- * C:\..\bar --> null
- * ~/foo/../bar/ --> ~/bar/
- * ~/../bar --> null
- *
- * (Note the file separator returned will be correct for Windows/Unix)
- *
- * @param filename the filename to normalize, null returns null
- * @return the normalized filename, or null if invalid
- */
- public static String normalize(String filename) {
- return doNormalize(filename, true);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Normalizes a path, removing double and single dot path steps,
- * and removing any final directory separator.
- *
- * This method normalizes a path to a standard format.
- * The input may contain separators in either Unix or Windows format.
- * The output will contain separators in the format of the system.
- *
- * A trailing slash will be removed.
- * A double slash will be merged to a single slash (but UNC names are handled).
- * A single dot path segment will be removed.
- * A double dot will cause that path segment and the one before to be removed.
- * If the double dot has no parent path segment to work with, null
- * is returned.
- *
- * The output will be the same on both Unix and Windows except
- * for the separator character.
- *
- * /foo// --> /foo
- * /foo/./ --> /foo
- * /foo/../bar --> /bar
- * /foo/../bar/ --> /bar
- * /foo/../bar/../baz --> /baz
- * //foo//./bar --> /foo/bar
- * /../ --> null
- * ../foo --> null
- * foo/bar/.. --> foo
- * foo/../../bar --> null
- * foo/../bar --> bar
- * //server/foo/../bar --> //server/bar
- * //server/../bar --> null
- * C:\foo\..\bar --> C:\bar
- * C:\..\bar --> null
- * ~/foo/../bar/ --> ~/bar
- * ~/../bar --> null
- *
- * (Note the file separator returned will be correct for Windows/Unix)
- *
- * @param filename the filename to normalize, null returns null
- * @return the normalized filename, or null if invalid
- */
- public static String normalizeNoEndSeparator(String filename) {
- return doNormalize(filename, false);
- }
-
- /**
- * Internal method to perform the normalization.
- *
- * @param filename the filename
- * @param keepSeparator true to keep the final separator
- * @return the normalized filename
- */
- private static String doNormalize(String filename, boolean keepSeparator) {
- if (filename == null) {
- return null;
- }
- int size = filename.length();
- if (size == 0) {
- return filename;
- }
- int prefix = getPrefixLength(filename);
- if (prefix < 0) {
- return null;
- }
-
- char[] array = new char[size + 2]; // +1 for possible extra slash, +2 for arraycopy
- filename.getChars(0, filename.length(), array, 0);
-
- // fix separators throughout
- for (int i = 0; i < array.length; i++) {
- if (array[i] == OTHER_SEPARATOR) {
- array[i] = SYSTEM_SEPARATOR;
- }
- }
-
- // add extra separator on the end to simplify code below
- boolean lastIsDirectory = true;
- if (array[size - 1] != SYSTEM_SEPARATOR) {
- array[size++] = SYSTEM_SEPARATOR;
- lastIsDirectory = false;
- }
-
- // adjoining slashes
- for (int i = prefix + 1; i < size; i++) {
- if (array[i] == SYSTEM_SEPARATOR && array[i - 1] == SYSTEM_SEPARATOR) {
- System.arraycopy(array, i, array, i - 1, size - i);
- size--;
- i--;
- }
- }
-
- // dot slash
- for (int i = prefix + 1; i < size; i++) {
- if (array[i] == SYSTEM_SEPARATOR && array[i - 1] == '.' &&
- (i == prefix + 1 || array[i - 2] == SYSTEM_SEPARATOR)) {
- if (i == size - 1) {
- lastIsDirectory = true;
- }
- System.arraycopy(array, i + 1, array, i - 1, size - i);
- size -=2;
- i--;
- }
- }
-
- // double dot slash
- outer:
- for (int i = prefix + 2; i < size; i++) {
- if (array[i] == SYSTEM_SEPARATOR && array[i - 1] == '.' && array[i - 2] == '.' &&
- (i == prefix + 2 || array[i - 3] == SYSTEM_SEPARATOR)) {
- if (i == prefix + 2) {
- return null;
- }
- if (i == size - 1) {
- lastIsDirectory = true;
- }
- int j;
- for (j = i - 4 ; j >= prefix; j--) {
- if (array[j] == SYSTEM_SEPARATOR) {
- // remove b/../ from a/b/../c
- System.arraycopy(array, i + 1, array, j + 1, size - i);
- size -= (i - j);
- i = j + 1;
- continue outer;
- }
- }
- // remove a/../ from a/../c
- System.arraycopy(array, i + 1, array, prefix, size - i);
- size -= (i + 1 - prefix);
- i = prefix + 1;
- }
- }
-
- if (size <= 0) { // should never be less than 0
- return "";
- }
- if (size <= prefix) { // should never be less than prefix
- return new String(array, 0, size);
- }
- if (lastIsDirectory && keepSeparator) {
- return new String(array, 0, size); // keep trailing separator
- }
- return new String(array, 0, size - 1); // lose trailing separator
- }
-
- //-----------------------------------------------------------------------
- /**
- * Concatenates a filename to a base path using normal command line style rules.
- *
- * The effect is equivalent to resultant directory after changing
- * directory to the first argument, followed by changing directory to
- * the second argument.
- *
- * The first argument is the base path, the second is the path to concatenate.
- * The returned path is always normalized via {@link #normalize(String)},
- * thus ..
is handled.
- *
- * If pathToAdd
is absolute (has an absolute prefix), then
- * it will be normalized and returned.
- * Otherwise, the paths will be joined, normalized and returned.
- *
- * The output will be the same on both Unix and Windows except
- * for the separator character.
- *
- * /foo/ + bar --> /foo/bar
- * /foo + bar --> /foo/bar
- * /foo + /bar --> /bar
- * /foo + C:/bar --> C:/bar
- * /foo + C:bar --> C:bar (*)
- * /foo/a/ + ../bar --> foo/bar
- * /foo/ + ../../bar --> null
- * /foo/ + /bar --> /bar
- * /foo/.. + /bar --> /bar
- * /foo + bar/c.txt --> /foo/bar/c.txt
- * /foo/c.txt + bar --> /foo/c.txt/bar (!)
- *
- * (*) Note that the Windows relative drive prefix is unreliable when
- * used with this method.
- * (!) Note that the first parameter must be a path. If it ends with a name, then
- * the name will be built into the concatenated path. If this might be a problem,
- * use {@link #getFullPath(String)} on the base path argument.
- *
- * @param basePath the base path to attach to, always treated as a path
- * @param fullFilenameToAdd the filename (or path) to attach to the base
- * @return the concatenated path, or null if invalid
- */
- public static String concat(String basePath, String fullFilenameToAdd) {
- int prefix = getPrefixLength(fullFilenameToAdd);
- if (prefix < 0) {
- return null;
- }
- if (prefix > 0) {
- return normalize(fullFilenameToAdd);
- }
- if (basePath == null) {
- return null;
- }
- int len = basePath.length();
- if (len == 0) {
- return normalize(fullFilenameToAdd);
- }
- char ch = basePath.charAt(len - 1);
- if (isSeparator(ch)) {
- return normalize(basePath + fullFilenameToAdd);
- } else {
- return normalize(basePath + '/' + fullFilenameToAdd);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Converts all separators to the Unix separator of forward slash.
- *
- * @param path the path to be changed, null ignored
- * @return the updated path
- */
- public static String separatorsToUnix(String path) {
- if (path == null || path.indexOf(WINDOWS_SEPARATOR) == -1) {
- return path;
- }
- return path.replace(WINDOWS_SEPARATOR, UNIX_SEPARATOR);
- }
-
- /**
- * Converts all separators to the Windows separator of backslash.
- *
- * @param path the path to be changed, null ignored
- * @return the updated path
- */
- public static String separatorsToWindows(String path) {
- if (path == null || path.indexOf(UNIX_SEPARATOR) == -1) {
- return path;
- }
- return path.replace(UNIX_SEPARATOR, WINDOWS_SEPARATOR);
- }
-
- /**
- * Converts all separators to the system separator.
- *
- * @param path the path to be changed, null ignored
- * @return the updated path
- */
- public static String separatorsToSystem(String path) {
- if (path == null) {
- return null;
- }
- if (isSystemWindows()) {
- return separatorsToWindows(path);
- } else {
- return separatorsToUnix(path);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns the length of the filename prefix, such as C:/
or ~/
.
- *
- * This method will handle a file in either Unix or Windows format.
- *
- * The prefix length includes the first slash in the full filename
- * if applicable. Thus, it is possible that the length returned is greater
- * than the length of the input string.
- *
- * Windows:
- * a\b\c.txt --> "" --> relative
- * \a\b\c.txt --> "\" --> current drive absolute
- * C:a\b\c.txt --> "C:" --> drive relative
- * C:\a\b\c.txt --> "C:\" --> absolute
- * \\server\a\b\c.txt --> "\\server\" --> UNC
- *
- * Unix:
- * a/b/c.txt --> "" --> relative
- * /a/b/c.txt --> "/" --> absolute
- * ~/a/b/c.txt --> "~/" --> current user
- * ~ --> "~/" --> current user (slash added)
- * ~user/a/b/c.txt --> "~user/" --> named user
- * ~user --> "~user/" --> named user (slash added)
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- * ie. both Unix and Windows prefixes are matched regardless.
- *
- * @param filename the filename to find the prefix in, null returns -1
- * @return the length of the prefix, -1 if invalid or null
- */
- public static int getPrefixLength(String filename) {
- if (filename == null) {
- return -1;
- }
- int len = filename.length();
- if (len == 0) {
- return 0;
- }
- char ch0 = filename.charAt(0);
- if (ch0 == ':') {
- return -1;
- }
- if (len == 1) {
- if (ch0 == '~') {
- return 2; // return a length greater than the input
- }
- return (isSeparator(ch0) ? 1 : 0);
- } else {
- if (ch0 == '~') {
- int posUnix = filename.indexOf(UNIX_SEPARATOR, 1);
- int posWin = filename.indexOf(WINDOWS_SEPARATOR, 1);
- if (posUnix == -1 && posWin == -1) {
- return len + 1; // return a length greater than the input
- }
- posUnix = (posUnix == -1 ? posWin : posUnix);
- posWin = (posWin == -1 ? posUnix : posWin);
- return Math.min(posUnix, posWin) + 1;
- }
- char ch1 = filename.charAt(1);
- if (ch1 == ':') {
- ch0 = Character.toUpperCase(ch0);
- if (ch0 >= 'A' && ch0 <= 'Z') {
- if (len == 2 || isSeparator(filename.charAt(2)) == false) {
- return 2;
- }
- return 3;
- }
- return -1;
-
- } else if (isSeparator(ch0) && isSeparator(ch1)) {
- int posUnix = filename.indexOf(UNIX_SEPARATOR, 2);
- int posWin = filename.indexOf(WINDOWS_SEPARATOR, 2);
- if ((posUnix == -1 && posWin == -1) || posUnix == 2 || posWin == 2) {
- return -1;
- }
- posUnix = (posUnix == -1 ? posWin : posUnix);
- posWin = (posWin == -1 ? posUnix : posWin);
- return Math.min(posUnix, posWin) + 1;
- } else {
- return (isSeparator(ch0) ? 1 : 0);
- }
- }
- }
-
- /**
- * Returns the index of the last directory separator character.
- *
- * This method will handle a file in either Unix or Windows format.
- * The position of the last forward or backslash is returned.
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * @param filename the filename to find the last path separator in, null returns -1
- * @return the index of the last separator character, or -1 if there
- * is no such character
- */
- public static int indexOfLastSeparator(String filename) {
- if (filename == null) {
- return -1;
- }
- int lastUnixPos = filename.lastIndexOf(UNIX_SEPARATOR);
- int lastWindowsPos = filename.lastIndexOf(WINDOWS_SEPARATOR);
- return Math.max(lastUnixPos, lastWindowsPos);
- }
-
- /**
- * Returns the index of the last extension separator character, which is a dot.
- *
- * This method also checks that there is no directory separator after the last dot.
- * To do this it uses {@link #indexOfLastSeparator(String)} which will
- * handle a file in either Unix or Windows format.
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * @param filename the filename to find the last path separator in, null returns -1
- * @return the index of the last separator character, or -1 if there
- * is no such character
- */
- public static int indexOfExtension(String filename) {
- if (filename == null) {
- return -1;
- }
- int extensionPos = filename.lastIndexOf(EXTENSION_SEPARATOR);
- int lastSeparator = indexOfLastSeparator(filename);
- return (lastSeparator > extensionPos ? -1 : extensionPos);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Gets the prefix from a full filename, such as C:/
- * or ~/
.
- *
- * This method will handle a file in either Unix or Windows format.
- * The prefix includes the first slash in the full filename where applicable.
- *
- * Windows:
- * a\b\c.txt --> "" --> relative
- * \a\b\c.txt --> "\" --> current drive absolute
- * C:a\b\c.txt --> "C:" --> drive relative
- * C:\a\b\c.txt --> "C:\" --> absolute
- * \\server\a\b\c.txt --> "\\server\" --> UNC
- *
- * Unix:
- * a/b/c.txt --> "" --> relative
- * /a/b/c.txt --> "/" --> absolute
- * ~/a/b/c.txt --> "~/" --> current user
- * ~ --> "~/" --> current user (slash added)
- * ~user/a/b/c.txt --> "~user/" --> named user
- * ~user --> "~user/" --> named user (slash added)
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- * ie. both Unix and Windows prefixes are matched regardless.
- *
- * @param filename the filename to query, null returns null
- * @return the prefix of the file, null if invalid
- */
- public static String getPrefix(String filename) {
- if (filename == null) {
- return null;
- }
- int len = getPrefixLength(filename);
- if (len < 0) {
- return null;
- }
- if (len > filename.length()) {
- return filename + UNIX_SEPARATOR; // we know this only happens for unix
- }
- return filename.substring(0, len);
- }
-
- /**
- * Gets the path from a full filename, which excludes the prefix.
- *
- * This method will handle a file in either Unix or Windows format.
- * The method is entirely text based, and returns the text before and
- * including the last forward or backslash.
- *
- * C:\a\b\c.txt --> a\b\
- * ~/a/b/c.txt --> a/b/
- * a.txt --> ""
- * a/b/c --> a/b/
- * a/b/c/ --> a/b/c/
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * This method drops the prefix from the result.
- * See {@link #getFullPath(String)} for the method that retains the prefix.
- *
- * @param filename the filename to query, null returns null
- * @return the path of the file, an empty string if none exists, null if invalid
- */
- public static String getPath(String filename) {
- return doGetPath(filename, 1);
- }
-
- /**
- * Gets the path from a full filename, which excludes the prefix, and
- * also excluding the final directory separator.
- *
- * This method will handle a file in either Unix or Windows format.
- * The method is entirely text based, and returns the text before the
- * last forward or backslash.
- *
- * C:\a\b\c.txt --> a\b
- * ~/a/b/c.txt --> a/b
- * a.txt --> ""
- * a/b/c --> a/b
- * a/b/c/ --> a/b/c
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * This method drops the prefix from the result.
- * See {@link #getFullPathNoEndSeparator(String)} for the method that retains the prefix.
- *
- * @param filename the filename to query, null returns null
- * @return the path of the file, an empty string if none exists, null if invalid
- */
- public static String getPathNoEndSeparator(String filename) {
- return doGetPath(filename, 0);
- }
-
- /**
- * Does the work of getting the path.
- *
- * @param filename the filename
- * @param separatorAdd 0 to omit the end separator, 1 to return it
- * @return the path
- */
- private static String doGetPath(String filename, int separatorAdd) {
- if (filename == null) {
- return null;
- }
- int prefix = getPrefixLength(filename);
- if (prefix < 0) {
- return null;
- }
- int index = indexOfLastSeparator(filename);
- if (prefix >= filename.length() || index < 0) {
- return "";
- }
- return filename.substring(prefix, index + separatorAdd);
- }
-
- /**
- * Gets the full path from a full filename, which is the prefix + path.
- *
- * This method will handle a file in either Unix or Windows format.
- * The method is entirely text based, and returns the text before and
- * including the last forward or backslash.
- *
- * C:\a\b\c.txt --> C:\a\b\
- * ~/a/b/c.txt --> ~/a/b/
- * a.txt --> ""
- * a/b/c --> a/b/
- * a/b/c/ --> a/b/c/
- * C: --> C:
- * C:\ --> C:\
- * ~ --> ~/
- * ~/ --> ~/
- * ~user --> ~user/
- * ~user/ --> ~user/
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * @param filename the filename to query, null returns null
- * @return the path of the file, an empty string if none exists, null if invalid
- */
- public static String getFullPath(String filename) {
- return doGetFullPath(filename, true);
- }
-
- /**
- * Gets the full path from a full filename, which is the prefix + path,
- * and also excluding the final directory separator.
- *
- * This method will handle a file in either Unix or Windows format.
- * The method is entirely text based, and returns the text before the
- * last forward or backslash.
- *
- * C:\a\b\c.txt --> C:\a\b
- * ~/a/b/c.txt --> ~/a/b
- * a.txt --> ""
- * a/b/c --> a/b
- * a/b/c/ --> a/b/c
- * C: --> C:
- * C:\ --> C:\
- * ~ --> ~
- * ~/ --> ~
- * ~user --> ~user
- * ~user/ --> ~user
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * @param filename the filename to query, null returns null
- * @return the path of the file, an empty string if none exists, null if invalid
- */
- public static String getFullPathNoEndSeparator(String filename) {
- return doGetFullPath(filename, false);
- }
-
- /**
- * Does the work of getting the path.
- *
- * @param filename the filename
- * @param includeSeparator true to include the end separator
- * @return the path
- */
- private static String doGetFullPath(String filename, boolean includeSeparator) {
- if (filename == null) {
- return null;
- }
- int prefix = getPrefixLength(filename);
- if (prefix < 0) {
- return null;
- }
- if (prefix >= filename.length()) {
- if (includeSeparator) {
- return getPrefix(filename); // add end slash if necessary
- } else {
- return filename;
- }
- }
- int index = indexOfLastSeparator(filename);
- if (index < 0) {
- return filename.substring(0, prefix);
- }
- int end = index + (includeSeparator ? 1 : 0);
- return filename.substring(0, end);
- }
-
- /**
- * Gets the name minus the path from a full filename.
- *
- * This method will handle a file in either Unix or Windows format.
- * The text after the last forward or backslash is returned.
- *
- * a/b/c.txt --> c.txt
- * a.txt --> a.txt
- * a/b/c --> c
- * a/b/c/ --> ""
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * @param filename the filename to query, null returns null
- * @return the name of the file without the path, or an empty string if none exists
- */
- public static String getName(String filename) {
- if (filename == null) {
- return null;
- }
- int index = indexOfLastSeparator(filename);
- return filename.substring(index + 1);
- }
-
- /**
- * Gets the base name, minus the full path and extension, from a full filename.
- *
- * This method will handle a file in either Unix or Windows format.
- * The text after the last forward or backslash and before the last dot is returned.
- *
- * a/b/c.txt --> c
- * a.txt --> a
- * a/b/c --> c
- * a/b/c/ --> ""
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * @param filename the filename to query, null returns null
- * @return the name of the file without the path, or an empty string if none exists
- */
- public static String getBaseName(String filename) {
- return removeExtension(getName(filename));
- }
-
- /**
- * Gets the extension of a filename.
- *
- * This method returns the textual part of the filename after the last dot.
- * There must be no directory separator after the dot.
- *
- * foo.txt --> "txt"
- * a/b/c.jpg --> "jpg"
- * a/b.txt/c --> ""
- * a/b/c --> ""
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * @param filename the filename to retrieve the extension of.
- * @return the extension of the file or an empty string if none exists.
- */
- public static String getExtension(String filename) {
- if (filename == null) {
- return null;
- }
- int index = indexOfExtension(filename);
- if (index == -1) {
- return "";
- } else {
- return filename.substring(index + 1);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Removes the extension from a filename.
- *
- * This method returns the textual part of the filename before the last dot.
- * There must be no directory separator after the dot.
- *
- * foo.txt --> foo
- * a\b\c.jpg --> a\b\c
- * a\b\c --> a\b\c
- * a.b\c --> a.b\c
- *
- *
- * The output will be the same irrespective of the machine that the code is running on.
- *
- * @param filename the filename to query, null returns null
- * @return the filename minus the extension
- */
- public static String removeExtension(String filename) {
- if (filename == null) {
- return null;
- }
- int index = indexOfExtension(filename);
- if (index == -1) {
- return filename;
- } else {
- return filename.substring(0, index);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks whether two filenames are equal exactly.
- *
- * No processing is performed on the filenames other than comparison,
- * thus this is merely a null-safe case-sensitive equals.
- *
- * @param filename1 the first filename to query, may be null
- * @param filename2 the second filename to query, may be null
- * @return true if the filenames are equal, null equals null
- * @see IOCase#SENSITIVE
- */
- public static boolean equals(String filename1, String filename2) {
- return equals(filename1, filename2, false, IOCase.SENSITIVE);
- }
-
- /**
- * Checks whether two filenames are equal using the case rules of the system.
- *
- * No processing is performed on the filenames other than comparison.
- * The check is case-sensitive on Unix and case-insensitive on Windows.
- *
- * @param filename1 the first filename to query, may be null
- * @param filename2 the second filename to query, may be null
- * @return true if the filenames are equal, null equals null
- * @see IOCase#SYSTEM
- */
- public static boolean equalsOnSystem(String filename1, String filename2) {
- return equals(filename1, filename2, false, IOCase.SYSTEM);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks whether two filenames are equal after both have been normalized.
- *
- * Both filenames are first passed to {@link #normalize(String)}.
- * The check is then performed in a case-sensitive manner.
- *
- * @param filename1 the first filename to query, may be null
- * @param filename2 the second filename to query, may be null
- * @return true if the filenames are equal, null equals null
- * @see IOCase#SENSITIVE
- */
- public static boolean equalsNormalized(String filename1, String filename2) {
- return equals(filename1, filename2, true, IOCase.SENSITIVE);
- }
-
- /**
- * Checks whether two filenames are equal after both have been normalized
- * and using the case rules of the system.
- *
- * Both filenames are first passed to {@link #normalize(String)}.
- * The check is then performed case-sensitive on Unix and
- * case-insensitive on Windows.
- *
- * @param filename1 the first filename to query, may be null
- * @param filename2 the second filename to query, may be null
- * @return true if the filenames are equal, null equals null
- * @see IOCase#SYSTEM
- */
- public static boolean equalsNormalizedOnSystem(String filename1, String filename2) {
- return equals(filename1, filename2, true, IOCase.SYSTEM);
- }
-
- /**
- * Checks whether two filenames are equal, optionally normalizing and providing
- * control over the case-sensitivity.
- *
- * @param filename1 the first filename to query, may be null
- * @param filename2 the second filename to query, may be null
- * @param normalized whether to normalize the filenames
- * @param caseSensitivity what case sensitivity rule to use, null means case-sensitive
- * @return true if the filenames are equal, null equals null
- * @since Commons IO 1.3
- */
- public static boolean equals(
- String filename1, String filename2,
- boolean normalized, IOCase caseSensitivity) {
-
- if (filename1 == null || filename2 == null) {
- return filename1 == filename2;
- }
- if (normalized) {
- filename1 = normalize(filename1);
- filename2 = normalize(filename2);
- if (filename1 == null || filename2 == null) {
- throw new NullPointerException(
- "Error normalizing one or both of the file names");
- }
- }
- if (caseSensitivity == null) {
- caseSensitivity = IOCase.SENSITIVE;
- }
- return caseSensitivity.checkEquals(filename1, filename2);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks whether the extension of the filename is that specified.
- *
- * This method obtains the extension as the textual part of the filename
- * after the last dot. There must be no directory separator after the dot.
- * The extension check is case-sensitive on all platforms.
- *
- * @param filename the filename to query, null returns false
- * @param extension the extension to check for, null or empty checks for no extension
- * @return true if the filename has the specified extension
- */
- public static boolean isExtension(String filename, String extension) {
- if (filename == null) {
- return false;
- }
- if (extension == null || extension.length() == 0) {
- return (indexOfExtension(filename) == -1);
- }
- String fileExt = getExtension(filename);
- return fileExt.equals(extension);
- }
-
- /**
- * Checks whether the extension of the filename is one of those specified.
- *
- * This method obtains the extension as the textual part of the filename
- * after the last dot. There must be no directory separator after the dot.
- * The extension check is case-sensitive on all platforms.
- *
- * @param filename the filename to query, null returns false
- * @param extensions the extensions to check for, null checks for no extension
- * @return true if the filename is one of the extensions
- */
- public static boolean isExtension(String filename, String[] extensions) {
- if (filename == null) {
- return false;
- }
- if (extensions == null || extensions.length == 0) {
- return (indexOfExtension(filename) == -1);
- }
- String fileExt = getExtension(filename);
- for (int i = 0; i < extensions.length; i++) {
- if (fileExt.equals(extensions[i])) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Checks whether the extension of the filename is one of those specified.
- *
- * This method obtains the extension as the textual part of the filename
- * after the last dot. There must be no directory separator after the dot.
- * The extension check is case-sensitive on all platforms.
- *
- * @param filename the filename to query, null returns false
- * @param extensions the extensions to check for, null checks for no extension
- * @return true if the filename is one of the extensions
- */
- public static boolean isExtension(String filename, Collection extensions) {
- if (filename == null) {
- return false;
- }
- if (extensions == null || extensions.isEmpty()) {
- return (indexOfExtension(filename) == -1);
- }
- String fileExt = getExtension(filename);
- for (Iterator it = extensions.iterator(); it.hasNext();) {
- if (fileExt.equals(it.next())) {
- return true;
- }
- }
- return false;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks a filename to see if it matches the specified wildcard matcher,
- * always testing case-sensitive.
- *
- * The wildcard matcher uses the characters '?' and '*' to represent a
- * single or multiple wildcard characters.
- * This is the same as often found on Dos/Unix command lines.
- * The check is case-sensitive always.
- *
- * wildcardMatch("c.txt", "*.txt") --> true
- * wildcardMatch("c.txt", "*.jpg") --> false
- * wildcardMatch("a/b/c.txt", "a/b/*") --> true
- * wildcardMatch("c.txt", "*.???") --> true
- * wildcardMatch("c.txt", "*.????") --> false
- *
- *
- * @param filename the filename to match on
- * @param wildcardMatcher the wildcard string to match against
- * @return true if the filename matches the wilcard string
- * @see IOCase#SENSITIVE
- */
- public static boolean wildcardMatch(String filename, String wildcardMatcher) {
- return wildcardMatch(filename, wildcardMatcher, IOCase.SENSITIVE);
- }
-
- /**
- * Checks a filename to see if it matches the specified wildcard matcher
- * using the case rules of the system.
- *
- * The wildcard matcher uses the characters '?' and '*' to represent a
- * single or multiple wildcard characters.
- * This is the same as often found on Dos/Unix command lines.
- * The check is case-sensitive on Unix and case-insensitive on Windows.
- *
- * wildcardMatch("c.txt", "*.txt") --> true
- * wildcardMatch("c.txt", "*.jpg") --> false
- * wildcardMatch("a/b/c.txt", "a/b/*") --> true
- * wildcardMatch("c.txt", "*.???") --> true
- * wildcardMatch("c.txt", "*.????") --> false
- *
- *
- * @param filename the filename to match on
- * @param wildcardMatcher the wildcard string to match against
- * @return true if the filename matches the wilcard string
- * @see IOCase#SYSTEM
- */
- public static boolean wildcardMatchOnSystem(String filename, String wildcardMatcher) {
- return wildcardMatch(filename, wildcardMatcher, IOCase.SYSTEM);
- }
-
- /**
- * Checks a filename to see if it matches the specified wildcard matcher
- * allowing control over case-sensitivity.
- *
- * The wildcard matcher uses the characters '?' and '*' to represent a
- * single or multiple wildcard characters.
- *
- * @param filename the filename to match on
- * @param wildcardMatcher the wildcard string to match against
- * @param caseSensitivity what case sensitivity rule to use, null means case-sensitive
- * @return true if the filename matches the wilcard string
- * @since Commons IO 1.3
- */
- public static boolean wildcardMatch(String filename, String wildcardMatcher, IOCase caseSensitivity) {
- if (filename == null && wildcardMatcher == null) {
- return true;
- }
- if (filename == null || wildcardMatcher == null) {
- return false;
- }
- if (caseSensitivity == null) {
- caseSensitivity = IOCase.SENSITIVE;
- }
- filename = caseSensitivity.convertCase(filename);
- wildcardMatcher = caseSensitivity.convertCase(wildcardMatcher);
- String[] wcs = splitOnTokens(wildcardMatcher);
- boolean anyChars = false;
- int textIdx = 0;
- int wcsIdx = 0;
- Stack backtrack = new Stack();
-
- // loop around a backtrack stack, to handle complex * matching
- do {
- if (backtrack.size() > 0) {
- int[] array = (int[]) backtrack.pop();
- wcsIdx = array[0];
- textIdx = array[1];
- anyChars = true;
- }
-
- // loop whilst tokens and text left to process
- while (wcsIdx < wcs.length) {
-
- if (wcs[wcsIdx].equals("?")) {
- // ? so move to next text char
- textIdx++;
- anyChars = false;
-
- } else if (wcs[wcsIdx].equals("*")) {
- // set any chars status
- anyChars = true;
- if (wcsIdx == wcs.length - 1) {
- textIdx = filename.length();
- }
-
- } else {
- // matching text token
- if (anyChars) {
- // any chars then try to locate text token
- textIdx = filename.indexOf(wcs[wcsIdx], textIdx);
- if (textIdx == -1) {
- // token not found
- break;
- }
- int repeat = filename.indexOf(wcs[wcsIdx], textIdx + 1);
- if (repeat >= 0) {
- backtrack.push(new int[] {wcsIdx, repeat});
- }
- } else {
- // matching from current position
- if (!filename.startsWith(wcs[wcsIdx], textIdx)) {
- // couldnt match token
- break;
- }
- }
-
- // matched text token, move text index to end of matched token
- textIdx += wcs[wcsIdx].length();
- anyChars = false;
- }
-
- wcsIdx++;
- }
-
- // full match
- if (wcsIdx == wcs.length && textIdx == filename.length()) {
- return true;
- }
-
- } while (backtrack.size() > 0);
-
- return false;
- }
-
- /**
- * Splits a string into a number of tokens.
- *
- * @param text the text to split
- * @return the tokens, never null
- */
- static String[] splitOnTokens(String text) {
- // used by wildcardMatch
- // package level so a unit test may run on this
-
- if (text.indexOf("?") == -1 && text.indexOf("*") == -1) {
- return new String[] { text };
- }
-
- char[] array = text.toCharArray();
- ArrayList list = new ArrayList();
- StringBuffer buffer = new StringBuffer();
- for (int i = 0; i < array.length; i++) {
- if (array[i] == '?' || array[i] == '*') {
- if (buffer.length() != 0) {
- list.add(buffer.toString());
- buffer.setLength(0);
- }
- if (array[i] == '?') {
- list.add("?");
- } else if (list.size() == 0 ||
- (i > 0 && list.get(list.size() - 1).equals("*") == false)) {
- list.add("*");
- }
- } else {
- buffer.append(array[i]);
- }
- }
- if (buffer.length() != 0) {
- list.add(buffer.toString());
- }
-
- return (String[]) list.toArray( new String[ list.size() ] );
- }
-
-}
diff --git a/src/org/apache/commons/io/HexDump.java b/src/org/apache/commons/io/HexDump.java
deleted file mode 100644
index b0d468d18..000000000
--- a/src/org/apache/commons/io/HexDump.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Dumps data in hexadecimal format.
- *
- * Provides a single function to take an array of bytes and display it
- * in hexadecimal form.
- *
- * Origin of code: POI.
- *
- * @author Scott Sanders
- * @author Marc Johnson
- * @version $Id: HexDump.java 596667 2007-11-20 13:50:14Z niallp $
- */
-public class HexDump {
-
- /**
- * Instances should NOT be constructed in standard programming.
- */
- public HexDump() {
- super();
- }
-
- /**
- * Dump an array of bytes to an OutputStream.
- *
- * @param data the byte array to be dumped
- * @param offset its offset, whatever that might mean
- * @param stream the OutputStream to which the data is to be
- * written
- * @param index initial index into the byte array
- *
- * @throws IOException is thrown if anything goes wrong writing
- * the data to stream
- * @throws ArrayIndexOutOfBoundsException if the index is
- * outside the data array's bounds
- * @throws IllegalArgumentException if the output stream is null
- */
-
- public static void dump(byte[] data, long offset,
- OutputStream stream, int index)
- throws IOException, ArrayIndexOutOfBoundsException,
- IllegalArgumentException {
-
- if ((index < 0) || (index >= data.length)) {
- throw new ArrayIndexOutOfBoundsException(
- "illegal index: " + index + " into array of length "
- + data.length);
- }
- if (stream == null) {
- throw new IllegalArgumentException("cannot write to nullstream");
- }
- long display_offset = offset + index;
- StringBuffer buffer = new StringBuffer(74);
-
- for (int j = index; j < data.length; j += 16) {
- int chars_read = data.length - j;
-
- if (chars_read > 16) {
- chars_read = 16;
- }
- dump(buffer, display_offset).append(' ');
- for (int k = 0; k < 16; k++) {
- if (k < chars_read) {
- dump(buffer, data[k + j]);
- } else {
- buffer.append(" ");
- }
- buffer.append(' ');
- }
- for (int k = 0; k < chars_read; k++) {
- if ((data[k + j] >= ' ') && (data[k + j] < 127)) {
- buffer.append((char) data[k + j]);
- } else {
- buffer.append('.');
- }
- }
- buffer.append(EOL);
- stream.write(buffer.toString().getBytes());
- stream.flush();
- buffer.setLength(0);
- display_offset += chars_read;
- }
- }
-
- /**
- * The line-separator (initializes to "line.separator" system property.
- */
- public static final String EOL =
- System.getProperty("line.separator");
- private static final char[] _hexcodes =
- {
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
- 'A', 'B', 'C', 'D', 'E', 'F'
- };
- private static final int[] _shifts =
- {
- 28, 24, 20, 16, 12, 8, 4, 0
- };
-
- /**
- * Dump a long value into a StringBuffer.
- *
- * @param _lbuffer the StringBuffer to dump the value in
- * @param value the long value to be dumped
- * @return StringBuffer containing the dumped value.
- */
- private static StringBuffer dump(StringBuffer _lbuffer, long value) {
- for (int j = 0; j < 8; j++) {
- _lbuffer
- .append(_hexcodes[((int) (value >> _shifts[j])) & 15]);
- }
- return _lbuffer;
- }
-
- /**
- * Dump a byte value into a StringBuffer.
- *
- * @param _cbuffer the StringBuffer to dump the value in
- * @param value the byte value to be dumped
- * @return StringBuffer containing the dumped value.
- */
- private static StringBuffer dump(StringBuffer _cbuffer, byte value) {
- for (int j = 0; j < 2; j++) {
- _cbuffer.append(_hexcodes[(value >> _shifts[j + 6]) & 15]);
- }
- return _cbuffer;
- }
-
-}
diff --git a/src/org/apache/commons/io/IOCase.java b/src/org/apache/commons/io/IOCase.java
deleted file mode 100644
index 4230f450d..000000000
--- a/src/org/apache/commons/io/IOCase.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io;
-
-import java.io.Serializable;
-
-/**
- * Enumeration of IO case sensitivity.
- *
- * Different filing systems have different rules for case-sensitivity.
- * Windows is case-insensitive, Unix is case-sensitive.
- *
- * This class captures that difference, providing an enumeration to
- * control how filename comparisons should be performed. It also provides
- * methods that use the enumeration to perform comparisons.
- *
- * Wherever possible, you should use the check
methods in this
- * class to compare filenames.
- *
- * @author Stephen Colebourne
- * @version $Id: IOCase.java 606345 2007-12-21 23:43:01Z ggregory $
- * @since Commons IO 1.3
- */
-public final class IOCase implements Serializable {
-
- /**
- * The constant for case sensitive regardless of operating system.
- */
- public static final IOCase SENSITIVE = new IOCase("Sensitive", true);
-
- /**
- * The constant for case insensitive regardless of operating system.
- */
- public static final IOCase INSENSITIVE = new IOCase("Insensitive", false);
-
- /**
- * The constant for case sensitivity determined by the current operating system.
- * Windows is case-insensitive when comparing filenames, Unix is case-sensitive.
- *
- * If you derialize this constant of Windows, and deserialize on Unix, or vice
- * versa, then the value of the case-sensitivity flag will change.
- */
- public static final IOCase SYSTEM = new IOCase("System", !FilenameUtils.isSystemWindows());
-
- /** Serialization version. */
- private static final long serialVersionUID = -6343169151696340687L;
-
- /** The enumeration name. */
- private final String name;
-
- /** The sensitivity flag. */
- private final transient boolean sensitive;
-
- //-----------------------------------------------------------------------
- /**
- * Factory method to create an IOCase from a name.
- *
- * @param name the name to find
- * @return the IOCase object
- * @throws IllegalArgumentException if the name is invalid
- */
- public static IOCase forName(String name) {
- if (IOCase.SENSITIVE.name.equals(name)){
- return IOCase.SENSITIVE;
- }
- if (IOCase.INSENSITIVE.name.equals(name)){
- return IOCase.INSENSITIVE;
- }
- if (IOCase.SYSTEM.name.equals(name)){
- return IOCase.SYSTEM;
- }
- throw new IllegalArgumentException("Invalid IOCase name: " + name);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Private constructor.
- *
- * @param name the name
- * @param sensitive the sensitivity
- */
- private IOCase(String name, boolean sensitive) {
- this.name = name;
- this.sensitive = sensitive;
- }
-
- /**
- * Replaces the enumeration from the stream with a real one.
- * This ensures that the correct flag is set for SYSTEM.
- *
- * @return the resolved object
- */
- private Object readResolve() {
- return forName(name);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Gets the name of the constant.
- *
- * @return the name of the constant
- */
- public String getName() {
- return name;
- }
-
- /**
- * Does the object represent case sensitive comparison.
- *
- * @return true if case sensitive
- */
- public boolean isCaseSensitive() {
- return sensitive;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Compares two strings using the case-sensitivity rule.
- *
- * This method mimics {@link String#compareTo} but takes case-sensitivity
- * into account.
- *
- * @param str1 the first string to compare, not null
- * @param str2 the second string to compare, not null
- * @return true if equal using the case rules
- * @throws NullPointerException if either string is null
- */
- public int checkCompareTo(String str1, String str2) {
- if (str1 == null || str2 == null) {
- throw new NullPointerException("The strings must not be null");
- }
- return sensitive ? str1.compareTo(str2) : str1.compareToIgnoreCase(str2);
- }
-
- /**
- * Compares two strings using the case-sensitivity rule.
- *
- * This method mimics {@link String#equals} but takes case-sensitivity
- * into account.
- *
- * @param str1 the first string to compare, not null
- * @param str2 the second string to compare, not null
- * @return true if equal using the case rules
- * @throws NullPointerException if either string is null
- */
- public boolean checkEquals(String str1, String str2) {
- if (str1 == null || str2 == null) {
- throw new NullPointerException("The strings must not be null");
- }
- return sensitive ? str1.equals(str2) : str1.equalsIgnoreCase(str2);
- }
-
- /**
- * Checks if one string starts with another using the case-sensitivity rule.
- *
- * This method mimics {@link String#startsWith(String)} but takes case-sensitivity
- * into account.
- *
- * @param str the string to check, not null
- * @param start the start to compare against, not null
- * @return true if equal using the case rules
- * @throws NullPointerException if either string is null
- */
- public boolean checkStartsWith(String str, String start) {
- return str.regionMatches(!sensitive, 0, start, 0, start.length());
- }
-
- /**
- * Checks if one string ends with another using the case-sensitivity rule.
- *
- * This method mimics {@link String#endsWith} but takes case-sensitivity
- * into account.
- *
- * @param str the string to check, not null
- * @param end the end to compare against, not null
- * @return true if equal using the case rules
- * @throws NullPointerException if either string is null
- */
- public boolean checkEndsWith(String str, String end) {
- int endLen = end.length();
- return str.regionMatches(!sensitive, str.length() - endLen, end, 0, endLen);
- }
-
- /**
- * Checks if one string contains another at a specific index using the case-sensitivity rule.
- *
- * This method mimics parts of {@link String#regionMatches(boolean, int, String, int, int)}
- * but takes case-sensitivity into account.
- *
- * @param str the string to check, not null
- * @param strStartIndex the index to start at in str
- * @param search the start to search for, not null
- * @return true if equal using the case rules
- * @throws NullPointerException if either string is null
- */
- public boolean checkRegionMatches(String str, int strStartIndex, String search) {
- return str.regionMatches(!sensitive, strStartIndex, search, 0, search.length());
- }
-
- /**
- * Converts the case of the input String to a standard format.
- * Subsequent operations can then use standard String methods.
- *
- * @param str the string to convert, null returns null
- * @return the lower-case version if case-insensitive
- */
- String convertCase(String str) {
- if (str == null) {
- return null;
- }
- return sensitive ? str : str.toLowerCase();
- }
-
- //-----------------------------------------------------------------------
- /**
- * Gets a string describing the sensitivity.
- *
- * @return a string describing the sensitivity
- */
- public String toString() {
- return name;
- }
-
-}
diff --git a/src/org/apache/commons/io/IOExceptionWithCause.java b/src/org/apache/commons/io/IOExceptionWithCause.java
deleted file mode 100644
index a15815a22..000000000
--- a/src/org/apache/commons/io/IOExceptionWithCause.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.io;
-
-import java.io.IOException;
-
-/**
- * Subclasses IOException with the {@link Throwable} constructors missing before Java 6. If you are using Java 6,
- * consider this class deprecated and use {@link IOException}.
- *
- * @author Apache Commons IO
- * @version $Id$
- * @since Commons IO 1.4
- */
-public class IOExceptionWithCause extends IOException {
-
- /**
- * Defines the serial version UID.
- */
- private static final long serialVersionUID = 1L;
-
- /**
- * Constructs a new instance with the given message and cause.
- *
- * As specified in {@link Throwable}, the message in the given cause
is not used in this instance's
- * message.
- *
- *
- * @param message
- * the message (see {@link #getMessage()})
- * @param cause
- * the cause (see {@link #getCause()}). A null
value is allowed.
- */
- public IOExceptionWithCause(String message, Throwable cause) {
- super(message);
- this.initCause(cause);
- }
-
- /**
- * Constructs a new instance with the given cause.
- *
- * The message is set to cause==null ? null : cause.toString()
, which by default contains the class
- * and message of cause
. This constructor is useful for call sites that just wrap another throwable.
- *
- *
- * @param cause
- * the cause (see {@link #getCause()}). A null
value is allowed.
- */
- public IOExceptionWithCause(Throwable cause) {
- super(cause == null ? null : cause.toString());
- this.initCause(cause);
- }
-
-}
diff --git a/src/org/apache/commons/io/IOUtils.java b/src/org/apache/commons/io/IOUtils.java
deleted file mode 100644
index 1f91e2562..000000000
--- a/src/org/apache/commons/io/IOUtils.java
+++ /dev/null
@@ -1,1274 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.CharArrayWriter;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.io.output.ByteArrayOutputStream;
-
-/**
- * General IO stream manipulation utilities.
- *
- * This class provides static utility methods for input/output operations.
- *
- * - closeQuietly - these methods close a stream ignoring nulls and exceptions
- *
- toXxx/read - these methods read data from a stream
- *
- write - these methods write data to a stream
- *
- copy - these methods copy all the data from one stream to another
- *
- contentEquals - these methods compare the content of two streams
- *
- *
- * The byte-to-char methods and char-to-byte methods involve a conversion step.
- * Two methods are provided in each case, one that uses the platform default
- * encoding and the other which allows you to specify an encoding. You are
- * encouraged to always specify an encoding because relying on the platform
- * default can lead to unexpected results, for example when moving from
- * development to production.
- *
- * All the methods in this class that read a stream are buffered internally.
- * This means that there is no cause to use a BufferedInputStream
- * or BufferedReader
. The default buffer size of 4K has been shown
- * to be efficient in tests.
- *
- * Wherever possible, the methods in this class do not flush or close
- * the stream. This is to avoid making non-portable assumptions about the
- * streams' origin and further use. Thus the caller is still responsible for
- * closing streams after use.
- *
- * Origin of code: Excalibur.
- *
- * @author Peter Donald
- * @author Jeff Turner
- * @author Matthew Hawthorne
- * @author Stephen Colebourne
- * @author Gareth Davis
- * @author Ian Springer
- * @author Niall Pemberton
- * @author Sandy McArthur
- * @version $Id: IOUtils.java 481854 2006-12-03 18:30:07Z scolebourne $
- */
-public class IOUtils {
- // NOTE: This class is focussed on InputStream, OutputStream, Reader and
- // Writer. Each method should take at least one of these as a parameter,
- // or return one of them.
-
- /**
- * The Unix directory separator character.
- */
- public static final char DIR_SEPARATOR_UNIX = '/';
- /**
- * The Windows directory separator character.
- */
- public static final char DIR_SEPARATOR_WINDOWS = '\\';
- /**
- * The system directory separator character.
- */
- public static final char DIR_SEPARATOR = File.separatorChar;
- /**
- * The Unix line separator string.
- */
- public static final String LINE_SEPARATOR_UNIX = "\n";
- /**
- * The Windows line separator string.
- */
- public static final String LINE_SEPARATOR_WINDOWS = "\r\n";
- /**
- * The system line separator string.
- */
- public static final String LINE_SEPARATOR;
- static {
- // avoid security issues
- StringWriter buf = new StringWriter(4);
- PrintWriter out = new PrintWriter(buf);
- out.println();
- LINE_SEPARATOR = buf.toString();
- }
-
- /**
- * The default buffer size to use.
- */
- private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
-
- /**
- * Instances should NOT be constructed in standard programming.
- */
- public IOUtils() {
- super();
- }
-
- //-----------------------------------------------------------------------
- /**
- * Unconditionally close an Reader
.
- *
- * Equivalent to {@link Reader#close()}, except any exceptions will be ignored.
- * This is typically used in finally blocks.
- *
- * @param input the Reader to close, may be null or already closed
- */
- public static void closeQuietly(Reader input) {
- try {
- if (input != null) {
- input.close();
- }
- } catch (IOException ioe) {
- // ignore
- }
- }
-
- /**
- * Unconditionally close a Writer
.
- *
- * Equivalent to {@link Writer#close()}, except any exceptions will be ignored.
- * This is typically used in finally blocks.
- *
- * @param output the Writer to close, may be null or already closed
- */
- public static void closeQuietly(Writer output) {
- try {
- if (output != null) {
- output.close();
- }
- } catch (IOException ioe) {
- // ignore
- }
- }
-
- /**
- * Unconditionally close an InputStream
.
- *
- * Equivalent to {@link InputStream#close()}, except any exceptions will be ignored.
- * This is typically used in finally blocks.
- *
- * @param input the InputStream to close, may be null or already closed
- */
- public static void closeQuietly(InputStream input) {
- try {
- if (input != null) {
- input.close();
- }
- } catch (IOException ioe) {
- // ignore
- }
- }
-
- /**
- * Unconditionally close an OutputStream
.
- *
- * Equivalent to {@link OutputStream#close()}, except any exceptions will be ignored.
- * This is typically used in finally blocks.
- *
- * @param output the OutputStream to close, may be null or already closed
- */
- public static void closeQuietly(OutputStream output) {
- try {
- if (output != null) {
- output.close();
- }
- } catch (IOException ioe) {
- // ignore
- }
- }
-
- // read toByteArray
- //-----------------------------------------------------------------------
- /**
- * Get the contents of an InputStream
as a byte[]
.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * @param input the InputStream
to read from
- * @return the requested byte array
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- */
- public static byte[] toByteArray(InputStream input) throws IOException {
- ByteArrayOutputStream output = new ByteArrayOutputStream();
- copy(input, output);
- return output.toByteArray();
- }
-
- /**
- * Get the contents of a Reader
as a byte[]
- * using the default character encoding of the platform.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader
.
- *
- * @param input the Reader
to read from
- * @return the requested byte array
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- */
- public static byte[] toByteArray(Reader input) throws IOException {
- ByteArrayOutputStream output = new ByteArrayOutputStream();
- copy(input, output);
- return output.toByteArray();
- }
-
- /**
- * Get the contents of a Reader
as a byte[]
- * using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader
.
- *
- * @param input the Reader
to read from
- * @param encoding the encoding to use, null means platform default
- * @return the requested byte array
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static byte[] toByteArray(Reader input, String encoding)
- throws IOException {
- ByteArrayOutputStream output = new ByteArrayOutputStream();
- copy(input, output, encoding);
- return output.toByteArray();
- }
-
- /**
- * Get the contents of a String
as a byte[]
- * using the default character encoding of the platform.
- *
- * This is the same as {@link String#getBytes()}.
- *
- * @param input the String
to convert
- * @return the requested byte array
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs (never occurs)
- * @deprecated Use {@link String#getBytes()}
- */
- public static byte[] toByteArray(String input) throws IOException {
- return input.getBytes();
- }
-
- // read char[]
- //-----------------------------------------------------------------------
- /**
- * Get the contents of an InputStream
as a character array
- * using the default character encoding of the platform.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * @param is the InputStream
to read from
- * @return the requested character array
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static char[] toCharArray(InputStream is) throws IOException {
- CharArrayWriter output = new CharArrayWriter();
- copy(is, output);
- return output.toCharArray();
- }
-
- /**
- * Get the contents of an InputStream
as a character array
- * using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * @param is the InputStream
to read from
- * @param encoding the encoding to use, null means platform default
- * @return the requested character array
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static char[] toCharArray(InputStream is, String encoding)
- throws IOException {
- CharArrayWriter output = new CharArrayWriter();
- copy(is, output, encoding);
- return output.toCharArray();
- }
-
- /**
- * Get the contents of a Reader
as a character array.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader
.
- *
- * @param input the Reader
to read from
- * @return the requested character array
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static char[] toCharArray(Reader input) throws IOException {
- CharArrayWriter sw = new CharArrayWriter();
- copy(input, sw);
- return sw.toCharArray();
- }
-
- // read toString
- //-----------------------------------------------------------------------
- /**
- * Get the contents of an InputStream
as a String
- * using the default character encoding of the platform.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * @param input the InputStream
to read from
- * @return the requested String
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- */
- public static String toString(InputStream input) throws IOException {
- StringWriter sw = new StringWriter();
- copy(input, sw);
- return sw.toString();
- }
-
- /**
- * Get the contents of an InputStream
as a String
- * using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * @param input the InputStream
to read from
- * @param encoding the encoding to use, null means platform default
- * @return the requested String
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- */
- public static String toString(InputStream input, String encoding)
- throws IOException {
- StringWriter sw = new StringWriter();
- copy(input, sw, encoding);
- return sw.toString();
- }
-
- /**
- * Get the contents of a Reader
as a String.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader
.
- *
- * @param input the Reader
to read from
- * @return the requested String
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- */
- public static String toString(Reader input) throws IOException {
- StringWriter sw = new StringWriter();
- copy(input, sw);
- return sw.toString();
- }
-
- /**
- * Get the contents of a byte[]
as a String
- * using the default character encoding of the platform.
- *
- * @param input the byte array to read from
- * @return the requested String
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs (never occurs)
- * @deprecated Use {@link String#String(byte[])}
- */
- public static String toString(byte[] input) throws IOException {
- return new String(input);
- }
-
- /**
- * Get the contents of a byte[]
as a String
- * using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * @param input the byte array to read from
- * @param encoding the encoding to use, null means platform default
- * @return the requested String
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs (never occurs)
- * @deprecated Use {@link String#String(byte[],String)}
- */
- public static String toString(byte[] input, String encoding)
- throws IOException {
- if (encoding == null) {
- return new String(input);
- } else {
- return new String(input, encoding);
- }
- }
-
- // readLines
- //-----------------------------------------------------------------------
- /**
- * Get the contents of an InputStream
as a list of Strings,
- * one entry per line, using the default character encoding of the platform.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * @param input the InputStream
to read from, not null
- * @return the list of Strings, never null
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static List readLines(InputStream input) throws IOException {
- InputStreamReader reader = new InputStreamReader(input);
- return readLines(reader);
- }
-
- /**
- * Get the contents of an InputStream
as a list of Strings,
- * one entry per line, using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * @param input the InputStream
to read from, not null
- * @param encoding the encoding to use, null means platform default
- * @return the list of Strings, never null
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static List readLines(InputStream input, String encoding) throws IOException {
- if (encoding == null) {
- return readLines(input);
- } else {
- InputStreamReader reader = new InputStreamReader(input, encoding);
- return readLines(reader);
- }
- }
-
- /**
- * Get the contents of a Reader
as a list of Strings,
- * one entry per line.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader
.
- *
- * @param input the Reader
to read from, not null
- * @return the list of Strings, never null
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static List readLines(Reader input) throws IOException {
- BufferedReader reader = new BufferedReader(input);
- List list = new ArrayList();
- String line = reader.readLine();
- while (line != null) {
- list.add(line);
- line = reader.readLine();
- }
- return list;
- }
-
- // lineIterator
- //-----------------------------------------------------------------------
- /**
- * Return an Iterator for the lines in a Reader
.
- *
- * LineIterator
holds a reference to the open
- * Reader
specified here. When you have finished with the
- * iterator you should close the reader to free internal resources.
- * This can be done by closing the reader directly, or by calling
- * {@link LineIterator#close()} or {@link LineIterator#closeQuietly(LineIterator)}.
- *
- * The recommended usage pattern is:
- *
- * try {
- * LineIterator it = IOUtils.lineIterator(reader);
- * while (it.hasNext()) {
- * String line = it.nextLine();
- * /// do something with line
- * }
- * } finally {
- * IOUtils.closeQuietly(reader);
- * }
- *
- *
- * @param reader the Reader
to read from, not null
- * @return an Iterator of the lines in the reader, never null
- * @throws IllegalArgumentException if the reader is null
- * @since Commons IO 1.2
- */
- public static LineIterator lineIterator(Reader reader) {
- return new LineIterator(reader);
- }
-
- /**
- * Return an Iterator for the lines in an InputStream
, using
- * the character encoding specified (or default encoding if null).
- *
- * LineIterator
holds a reference to the open
- * InputStream
specified here. When you have finished with
- * the iterator you should close the stream to free internal resources.
- * This can be done by closing the stream directly, or by calling
- * {@link LineIterator#close()} or {@link LineIterator#closeQuietly(LineIterator)}.
- *
- * The recommended usage pattern is:
- *
- * try {
- * LineIterator it = IOUtils.lineIterator(stream, "UTF-8");
- * while (it.hasNext()) {
- * String line = it.nextLine();
- * /// do something with line
- * }
- * } finally {
- * IOUtils.closeQuietly(stream);
- * }
- *
- *
- * @param input the InputStream
to read from, not null
- * @param encoding the encoding to use, null means platform default
- * @return an Iterator of the lines in the reader, never null
- * @throws IllegalArgumentException if the input is null
- * @throws IOException if an I/O error occurs, such as if the encoding is invalid
- * @since Commons IO 1.2
- */
- public static LineIterator lineIterator(InputStream input, String encoding)
- throws IOException {
- Reader reader = null;
- if (encoding == null) {
- reader = new InputStreamReader(input);
- } else {
- reader = new InputStreamReader(input, encoding);
- }
- return new LineIterator(reader);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Convert the specified string to an input stream, encoded as bytes
- * using the default character encoding of the platform.
- *
- * @param input the string to convert
- * @return an input stream
- * @since Commons IO 1.1
- */
- public static InputStream toInputStream(String input) {
- byte[] bytes = input.getBytes();
- return new ByteArrayInputStream(bytes);
- }
-
- /**
- * Convert the specified string to an input stream, encoded as bytes
- * using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * @param input the string to convert
- * @param encoding the encoding to use, null means platform default
- * @throws IOException if the encoding is invalid
- * @return an input stream
- * @since Commons IO 1.1
- */
- public static InputStream toInputStream(String input, String encoding) throws IOException {
- byte[] bytes = encoding != null ? input.getBytes(encoding) : input.getBytes();
- return new ByteArrayInputStream(bytes);
- }
-
- // write byte[]
- //-----------------------------------------------------------------------
- /**
- * Writes bytes from a byte[]
to an OutputStream
.
- *
- * @param data the byte array to write, do not modify during output,
- * null ignored
- * @param output the OutputStream
to write to
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(byte[] data, OutputStream output)
- throws IOException {
- if (data != null) {
- output.write(data);
- }
- }
-
- /**
- * Writes bytes from a byte[]
to chars on a Writer
- * using the default character encoding of the platform.
- *
- * This method uses {@link String#String(byte[])}.
- *
- * @param data the byte array to write, do not modify during output,
- * null ignored
- * @param output the Writer
to write to
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(byte[] data, Writer output) throws IOException {
- if (data != null) {
- output.write(new String(data));
- }
- }
-
- /**
- * Writes bytes from a byte[]
to chars on a Writer
- * using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * This method uses {@link String#String(byte[], String)}.
- *
- * @param data the byte array to write, do not modify during output,
- * null ignored
- * @param output the Writer
to write to
- * @param encoding the encoding to use, null means platform default
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(byte[] data, Writer output, String encoding)
- throws IOException {
- if (data != null) {
- if (encoding == null) {
- write(data, output);
- } else {
- output.write(new String(data, encoding));
- }
- }
- }
-
- // write char[]
- //-----------------------------------------------------------------------
- /**
- * Writes chars from a char[]
to a Writer
- * using the default character encoding of the platform.
- *
- * @param data the char array to write, do not modify during output,
- * null ignored
- * @param output the Writer
to write to
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(char[] data, Writer output) throws IOException {
- if (data != null) {
- output.write(data);
- }
- }
-
- /**
- * Writes chars from a char[]
to bytes on an
- * OutputStream
.
- *
- * This method uses {@link String#String(char[])} and
- * {@link String#getBytes()}.
- *
- * @param data the char array to write, do not modify during output,
- * null ignored
- * @param output the OutputStream
to write to
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(char[] data, OutputStream output)
- throws IOException {
- if (data != null) {
- output.write(new String(data).getBytes());
- }
- }
-
- /**
- * Writes chars from a char[]
to bytes on an
- * OutputStream
using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * This method uses {@link String#String(char[])} and
- * {@link String#getBytes(String)}.
- *
- * @param data the char array to write, do not modify during output,
- * null ignored
- * @param output the OutputStream
to write to
- * @param encoding the encoding to use, null means platform default
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(char[] data, OutputStream output, String encoding)
- throws IOException {
- if (data != null) {
- if (encoding == null) {
- write(data, output);
- } else {
- output.write(new String(data).getBytes(encoding));
- }
- }
- }
-
- // write String
- //-----------------------------------------------------------------------
- /**
- * Writes chars from a String
to a Writer
.
- *
- * @param data the String
to write, null ignored
- * @param output the Writer
to write to
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(String data, Writer output) throws IOException {
- if (data != null) {
- output.write(data);
- }
- }
-
- /**
- * Writes chars from a String
to bytes on an
- * OutputStream
using the default character encoding of the
- * platform.
- *
- * This method uses {@link String#getBytes()}.
- *
- * @param data the String
to write, null ignored
- * @param output the OutputStream
to write to
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(String data, OutputStream output)
- throws IOException {
- if (data != null) {
- output.write(data.getBytes());
- }
- }
-
- /**
- * Writes chars from a String
to bytes on an
- * OutputStream
using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * This method uses {@link String#getBytes(String)}.
- *
- * @param data the String
to write, null ignored
- * @param output the OutputStream
to write to
- * @param encoding the encoding to use, null means platform default
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(String data, OutputStream output, String encoding)
- throws IOException {
- if (data != null) {
- if (encoding == null) {
- write(data, output);
- } else {
- output.write(data.getBytes(encoding));
- }
- }
- }
-
- // write StringBuffer
- //-----------------------------------------------------------------------
- /**
- * Writes chars from a StringBuffer
to a Writer
.
- *
- * @param data the StringBuffer
to write, null ignored
- * @param output the Writer
to write to
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(StringBuffer data, Writer output)
- throws IOException {
- if (data != null) {
- output.write(data.toString());
- }
- }
-
- /**
- * Writes chars from a StringBuffer
to bytes on an
- * OutputStream
using the default character encoding of the
- * platform.
- *
- * This method uses {@link String#getBytes()}.
- *
- * @param data the StringBuffer
to write, null ignored
- * @param output the OutputStream
to write to
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(StringBuffer data, OutputStream output)
- throws IOException {
- if (data != null) {
- output.write(data.toString().getBytes());
- }
- }
-
- /**
- * Writes chars from a StringBuffer
to bytes on an
- * OutputStream
using the specified character encoding.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * This method uses {@link String#getBytes(String)}.
- *
- * @param data the StringBuffer
to write, null ignored
- * @param output the OutputStream
to write to
- * @param encoding the encoding to use, null means platform default
- * @throws NullPointerException if output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void write(StringBuffer data, OutputStream output,
- String encoding) throws IOException {
- if (data != null) {
- if (encoding == null) {
- write(data, output);
- } else {
- output.write(data.toString().getBytes(encoding));
- }
- }
- }
-
- // writeLines
- //-----------------------------------------------------------------------
- /**
- * Writes the toString()
value of each item in a collection to
- * an OutputStream
line by line, using the default character
- * encoding of the platform and the specified line ending.
- *
- * @param lines the lines to write, null entries produce blank lines
- * @param lineEnding the line separator to use, null is system default
- * @param output the OutputStream
to write to, not null, not closed
- * @throws NullPointerException if the output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void writeLines(Collection lines, String lineEnding,
- OutputStream output) throws IOException {
- if (lines == null) {
- return;
- }
- if (lineEnding == null) {
- lineEnding = LINE_SEPARATOR;
- }
- for (Iterator it = lines.iterator(); it.hasNext(); ) {
- Object line = it.next();
- if (line != null) {
- output.write(line.toString().getBytes());
- }
- output.write(lineEnding.getBytes());
- }
- }
-
- /**
- * Writes the toString()
value of each item in a collection to
- * an OutputStream
line by line, using the specified character
- * encoding and the specified line ending.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * @param lines the lines to write, null entries produce blank lines
- * @param lineEnding the line separator to use, null is system default
- * @param output the OutputStream
to write to, not null, not closed
- * @param encoding the encoding to use, null means platform default
- * @throws NullPointerException if the output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void writeLines(Collection lines, String lineEnding,
- OutputStream output, String encoding) throws IOException {
- if (encoding == null) {
- writeLines(lines, lineEnding, output);
- } else {
- if (lines == null) {
- return;
- }
- if (lineEnding == null) {
- lineEnding = LINE_SEPARATOR;
- }
- for (Iterator it = lines.iterator(); it.hasNext(); ) {
- Object line = it.next();
- if (line != null) {
- output.write(line.toString().getBytes(encoding));
- }
- output.write(lineEnding.getBytes(encoding));
- }
- }
- }
-
- /**
- * Writes the toString()
value of each item in a collection to
- * a Writer
line by line, using the specified line ending.
- *
- * @param lines the lines to write, null entries produce blank lines
- * @param lineEnding the line separator to use, null is system default
- * @param writer the Writer
to write to, not null, not closed
- * @throws NullPointerException if the input is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void writeLines(Collection lines, String lineEnding,
- Writer writer) throws IOException {
- if (lines == null) {
- return;
- }
- if (lineEnding == null) {
- lineEnding = LINE_SEPARATOR;
- }
- for (Iterator it = lines.iterator(); it.hasNext(); ) {
- Object line = it.next();
- if (line != null) {
- writer.write(line.toString());
- }
- writer.write(lineEnding);
- }
- }
-
- // copy from InputStream
- //-----------------------------------------------------------------------
- /**
- * Copy bytes from an InputStream
to an
- * OutputStream
.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * Large streams (over 2GB) will return a bytes copied value of
- * -1
after the copy has completed since the correct
- * number of bytes cannot be returned as an int. For large streams
- * use the copyLarge(InputStream, OutputStream)
method.
- *
- * @param input the InputStream
to read from
- * @param output the OutputStream
to write to
- * @return the number of bytes copied
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- * @throws ArithmeticException if the byte count is too large
- * @since Commons IO 1.1
- */
- public static int copy(InputStream input, OutputStream output) throws IOException {
- long count = copyLarge(input, output);
- if (count > Integer.MAX_VALUE) {
- return -1;
- }
- return (int) count;
- }
-
- /**
- * Copy bytes from a large (over 2GB) InputStream
to an
- * OutputStream
.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * @param input the InputStream
to read from
- * @param output the OutputStream
to write to
- * @return the number of bytes copied
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.3
- */
- public static long copyLarge(InputStream input, OutputStream output)
- throws IOException {
- byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
- long count = 0;
- int n = 0;
- while (-1 != (n = input.read(buffer))) {
- output.write(buffer, 0, n);
- count += n;
- }
- return count;
- }
-
- /**
- * Copy bytes from an InputStream
to chars on a
- * Writer
using the default character encoding of the platform.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * This method uses {@link InputStreamReader}.
- *
- * @param input the InputStream
to read from
- * @param output the Writer
to write to
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void copy(InputStream input, Writer output)
- throws IOException {
- InputStreamReader in = new InputStreamReader(input);
- copy(in, output);
- }
-
- /**
- * Copy bytes from an InputStream
to chars on a
- * Writer
using the specified character encoding.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedInputStream
.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * This method uses {@link InputStreamReader}.
- *
- * @param input the InputStream
to read from
- * @param output the Writer
to write to
- * @param encoding the encoding to use, null means platform default
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void copy(InputStream input, Writer output, String encoding)
- throws IOException {
- if (encoding == null) {
- copy(input, output);
- } else {
- InputStreamReader in = new InputStreamReader(input, encoding);
- copy(in, output);
- }
- }
-
- // copy from Reader
- //-----------------------------------------------------------------------
- /**
- * Copy chars from a Reader
to a Writer
.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader
.
- *
- * Large streams (over 2GB) will return a chars copied value of
- * -1
after the copy has completed since the correct
- * number of chars cannot be returned as an int. For large streams
- * use the copyLarge(Reader, Writer)
method.
- *
- * @param input the Reader
to read from
- * @param output the Writer
to write to
- * @return the number of characters copied
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- * @throws ArithmeticException if the character count is too large
- * @since Commons IO 1.1
- */
- public static int copy(Reader input, Writer output) throws IOException {
- long count = copyLarge(input, output);
- if (count > Integer.MAX_VALUE) {
- return -1;
- }
- return (int) count;
- }
-
- /**
- * Copy chars from a large (over 2GB) Reader
to a Writer
.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader
.
- *
- * @param input the Reader
to read from
- * @param output the Writer
to write to
- * @return the number of characters copied
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.3
- */
- public static long copyLarge(Reader input, Writer output) throws IOException {
- char[] buffer = new char[DEFAULT_BUFFER_SIZE];
- long count = 0;
- int n = 0;
- while (-1 != (n = input.read(buffer))) {
- output.write(buffer, 0, n);
- count += n;
- }
- return count;
- }
-
- /**
- * Copy chars from a Reader
to bytes on an
- * OutputStream
using the default character encoding of the
- * platform, and calling flush.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader
.
- *
- * Due to the implementation of OutputStreamWriter, this method performs a
- * flush.
- *
- * This method uses {@link OutputStreamWriter}.
- *
- * @param input the Reader
to read from
- * @param output the OutputStream
to write to
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void copy(Reader input, OutputStream output)
- throws IOException {
- OutputStreamWriter out = new OutputStreamWriter(output);
- copy(input, out);
- // XXX Unless anyone is planning on rewriting OutputStreamWriter, we
- // have to flush here.
- out.flush();
- }
-
- /**
- * Copy chars from a Reader
to bytes on an
- * OutputStream
using the specified character encoding, and
- * calling flush.
- *
- * This method buffers the input internally, so there is no need to use a
- * BufferedReader
.
- *
- * Character encoding names can be found at
- * IANA.
- *
- * Due to the implementation of OutputStreamWriter, this method performs a
- * flush.
- *
- * This method uses {@link OutputStreamWriter}.
- *
- * @param input the Reader
to read from
- * @param output the OutputStream
to write to
- * @param encoding the encoding to use, null means platform default
- * @throws NullPointerException if the input or output is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static void copy(Reader input, OutputStream output, String encoding)
- throws IOException {
- if (encoding == null) {
- copy(input, output);
- } else {
- OutputStreamWriter out = new OutputStreamWriter(output, encoding);
- copy(input, out);
- // XXX Unless anyone is planning on rewriting OutputStreamWriter,
- // we have to flush here.
- out.flush();
- }
- }
-
- // content equals
- //-----------------------------------------------------------------------
- /**
- * Compare the contents of two Streams to determine if they are equal or
- * not.
- *
- * This method buffers the input internally using
- * BufferedInputStream
if they are not already buffered.
- *
- * @param input1 the first stream
- * @param input2 the second stream
- * @return true if the content of the streams are equal or they both don't
- * exist, false otherwise
- * @throws NullPointerException if either input is null
- * @throws IOException if an I/O error occurs
- */
- public static boolean contentEquals(InputStream input1, InputStream input2)
- throws IOException {
- if (!(input1 instanceof BufferedInputStream)) {
- input1 = new BufferedInputStream(input1);
- }
- if (!(input2 instanceof BufferedInputStream)) {
- input2 = new BufferedInputStream(input2);
- }
-
- int ch = input1.read();
- while (-1 != ch) {
- int ch2 = input2.read();
- if (ch != ch2) {
- return false;
- }
- ch = input1.read();
- }
-
- int ch2 = input2.read();
- return (ch2 == -1);
- }
-
- /**
- * Compare the contents of two Readers to determine if they are equal or
- * not.
- *
- * This method buffers the input internally using
- * BufferedReader
if they are not already buffered.
- *
- * @param input1 the first reader
- * @param input2 the second reader
- * @return true if the content of the readers are equal or they both don't
- * exist, false otherwise
- * @throws NullPointerException if either input is null
- * @throws IOException if an I/O error occurs
- * @since Commons IO 1.1
- */
- public static boolean contentEquals(Reader input1, Reader input2)
- throws IOException {
- if (!(input1 instanceof BufferedReader)) {
- input1 = new BufferedReader(input1);
- }
- if (!(input2 instanceof BufferedReader)) {
- input2 = new BufferedReader(input2);
- }
-
- int ch = input1.read();
- while (-1 != ch) {
- int ch2 = input2.read();
- if (ch != ch2) {
- return false;
- }
- ch = input1.read();
- }
-
- int ch2 = input2.read();
- return (ch2 == -1);
- }
-
-}
diff --git a/src/org/apache/commons/io/LineIterator.java b/src/org/apache/commons/io/LineIterator.java
deleted file mode 100644
index eac47d23a..000000000
--- a/src/org/apache/commons/io/LineIterator.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * An Iterator over the lines in a Reader
.
- *
- * LineIterator
holds a reference to an open Reader
.
- * When you have finished with the iterator you should close the reader
- * to free internal resources. This can be done by closing the reader directly,
- * or by calling the {@link #close()} or {@link #closeQuietly(LineIterator)}
- * method on the iterator.
- *
- * The recommended usage pattern is:
- *
- * LineIterator it = FileUtils.lineIterator(file, "UTF-8");
- * try {
- * while (it.hasNext()) {
- * String line = it.nextLine();
- * /// do something with line
- * }
- * } finally {
- * LineIterator.closeQuietly(iterator);
- * }
- *
- *
- * @author Niall Pemberton
- * @author Stephen Colebourne
- * @author Sandy McArthur
- * @version $Id: LineIterator.java 437567 2006-08-28 06:39:07Z bayard $
- * @since Commons IO 1.2
- */
-public class LineIterator implements Iterator {
-
- /** The reader that is being read. */
- private final BufferedReader bufferedReader;
- /** The current line. */
- private String cachedLine;
- /** A flag indicating if the iterator has been fully read. */
- private boolean finished = false;
-
- /**
- * Constructs an iterator of the lines for a Reader
.
- *
- * @param reader the Reader
to read from, not null
- * @throws IllegalArgumentException if the reader is null
- */
- public LineIterator(final Reader reader) throws IllegalArgumentException {
- if (reader == null) {
- throw new IllegalArgumentException("Reader must not be null");
- }
- if (reader instanceof BufferedReader) {
- bufferedReader = (BufferedReader) reader;
- } else {
- bufferedReader = new BufferedReader(reader);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Indicates whether the Reader
has more lines.
- * If there is an IOException
then {@link #close()} will
- * be called on this instance.
- *
- * @return true
if the Reader has more lines
- * @throws IllegalStateException if an IO exception occurs
- */
- public boolean hasNext() {
- if (cachedLine != null) {
- return true;
- } else if (finished) {
- return false;
- } else {
- try {
- while (true) {
- String line = bufferedReader.readLine();
- if (line == null) {
- finished = true;
- return false;
- } else if (isValidLine(line)) {
- cachedLine = line;
- return true;
- }
- }
- } catch(IOException ioe) {
- close();
- throw new IllegalStateException(ioe.toString());
- }
- }
- }
-
- /**
- * Overridable method to validate each line that is returned.
- *
- * @param line the line that is to be validated
- * @return true if valid, false to remove from the iterator
- */
- protected boolean isValidLine(String line) {
- return true;
- }
-
- /**
- * Returns the next line in the wrapped Reader
.
- *
- * @return the next line from the input
- * @throws NoSuchElementException if there is no line to return
- */
- public Object next() {
- return nextLine();
- }
-
- /**
- * Returns the next line in the wrapped Reader
.
- *
- * @return the next line from the input
- * @throws NoSuchElementException if there is no line to return
- */
- public String nextLine() {
- if (!hasNext()) {
- throw new NoSuchElementException("No more lines");
- }
- String currentLine = cachedLine;
- cachedLine = null;
- return currentLine;
- }
-
- /**
- * Closes the underlying Reader
quietly.
- * This method is useful if you only want to process the first few
- * lines of a larger file. If you do not close the iterator
- * then the Reader
remains open.
- * This method can safely be called multiple times.
- */
- public void close() {
- finished = true;
- IOUtils.closeQuietly(bufferedReader);
- cachedLine = null;
- }
-
- /**
- * Unsupported.
- *
- * @throws UnsupportedOperationException always
- */
- public void remove() {
- throw new UnsupportedOperationException("Remove unsupported on LineIterator");
- }
-
- //-----------------------------------------------------------------------
- /**
- * Closes the iterator, handling null and ignoring exceptions.
- *
- * @param iterator the iterator to close
- */
- public static void closeQuietly(LineIterator iterator) {
- if (iterator != null) {
- iterator.close();
- }
- }
-
-}
diff --git a/src/org/apache/commons/io/comparator/DefaultFileComparator.java b/src/org/apache/commons/io/comparator/DefaultFileComparator.java
deleted file mode 100644
index d36076288..000000000
--- a/src/org/apache/commons/io/comparator/DefaultFileComparator.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.comparator;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * Compare two files using the default {@link File#compareTo(File)} method.
- *
- * This comparator can be used to sort lists or arrays of files
- * by using the default file comparison.
- *
- * Example of sorting a list of files using the
- * {@link #DEFAULT_COMPARATOR} singleton instance:
- *
- * List<File> list = ...
- * Collections.sort(list, DefaultFileComparator.DEFAULT_COMPARATOR);
- *
- *
- * Example of doing a reverse sort of an array of files using the
- * {@link #DEFAULT_REVERSE} singleton instance:
- *
- * File[] array = ...
- * Arrays.sort(array, DefaultFileComparator.DEFAULT_REVERSE);
- *
- *
- *
- * @version $Revision: 609243 $ $Date: 2008-01-06 00:30:42 +0000 (Sun, 06 Jan 2008) $
- * @since Commons IO 1.4
- */
-public class DefaultFileComparator implements Comparator, Serializable {
-
- /** Singleton default comparator instance */
- public static final Comparator DEFAULT_COMPARATOR = new DefaultFileComparator();
-
- /** Singleton reverse default comparator instance */
- public static final Comparator DEFAULT_REVERSE = new ReverseComparator(DEFAULT_COMPARATOR);
-
- /**
- * Compare the two files using the {@link File#compareTo(File)} method.
- *
- * @param obj1 The first file to compare
- * @param obj2 The second file to compare
- * @return the result of calling file1's
- * {@link File#compareTo(File)} with file2 as the parameter.
- */
- public int compare(Object obj1, Object obj2) {
- File file1 = (File)obj1;
- File file2 = (File)obj2;
- return file1.compareTo(file2);
- }
-}
diff --git a/src/org/apache/commons/io/comparator/ExtensionFileComparator.java b/src/org/apache/commons/io/comparator/ExtensionFileComparator.java
deleted file mode 100644
index 158480fb3..000000000
--- a/src/org/apache/commons/io/comparator/ExtensionFileComparator.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.comparator;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.Comparator;
-
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.IOCase;
-
-/**
- * Compare the file name extensions for order
- * (see {@link FilenameUtils#getExtension(String)}).
- *
- * This comparator can be used to sort lists or arrays of files
- * by their file extension either in a case-sensitive, case-insensitive or
- * system dependant case sensitive way. A number of singleton instances
- * are provided for the various case sensitivity options (using {@link IOCase})
- * and the reverse of those options.
- *
- * Example of a case-sensitive file extension sort using the
- * {@link #EXTENSION_COMPARATOR} singleton instance:
- *
- * List<File> list = ...
- * Collections.sort(list, ExtensionFileComparator.EXTENSION_COMPARATOR);
- *
- *
- * Example of a reverse case-insensitive file extension sort using the
- * {@link #EXTENSION_INSENSITIVE_REVERSE} singleton instance:
- *
- * File[] array = ...
- * Arrays.sort(array, ExtensionFileComparator.EXTENSION_INSENSITIVE_REVERSE);
- *
- *
- *
- * @version $Revision: 609243 $ $Date: 2008-01-06 00:30:42 +0000 (Sun, 06 Jan 2008) $
- * @since Commons IO 1.4
- */
-public class ExtensionFileComparator implements Comparator, Serializable {
-
- /** Case-sensitive extension comparator instance (see {@link IOCase#SENSITIVE}) */
- public static final Comparator EXTENSION_COMPARATOR = new ExtensionFileComparator();
-
- /** Reverse case-sensitive extension comparator instance (see {@link IOCase#SENSITIVE}) */
- public static final Comparator EXTENSION_REVERSE = new ReverseComparator(EXTENSION_COMPARATOR);
-
- /** Case-insensitive extension comparator instance (see {@link IOCase#INSENSITIVE}) */
- public static final Comparator EXTENSION_INSENSITIVE_COMPARATOR = new ExtensionFileComparator(IOCase.INSENSITIVE);
-
- /** Reverse case-insensitive extension comparator instance (see {@link IOCase#INSENSITIVE}) */
- public static final Comparator EXTENSION_INSENSITIVE_REVERSE
- = new ReverseComparator(EXTENSION_INSENSITIVE_COMPARATOR);
-
- /** System sensitive extension comparator instance (see {@link IOCase#SYSTEM}) */
- public static final Comparator EXTENSION_SYSTEM_COMPARATOR = new ExtensionFileComparator(IOCase.SYSTEM);
-
- /** Reverse system sensitive path comparator instance (see {@link IOCase#SYSTEM}) */
- public static final Comparator EXTENSION_SYSTEM_REVERSE = new ReverseComparator(EXTENSION_SYSTEM_COMPARATOR);
-
- /** Whether the comparison is case sensitive. */
- private final IOCase caseSensitivity;
-
- /**
- * Construct a case sensitive file extension comparator instance.
- */
- public ExtensionFileComparator() {
- this.caseSensitivity = IOCase.SENSITIVE;
- }
-
- /**
- * Construct a file extension comparator instance with the specified case-sensitivity.
- *
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- */
- public ExtensionFileComparator(IOCase caseSensitivity) {
- this.caseSensitivity = caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity;
- }
-
- /**
- * Compare the extensions of two files the specified case sensitivity.
- *
- * @param obj1 The first file to compare
- * @param obj2 The second file to compare
- * @return a negative value if the first file's extension
- * is less than the second, zero if the extensions are the
- * same and a positive value if the first files extension
- * is greater than the second file.
- *
- */
- public int compare(Object obj1, Object obj2) {
- File file1 = (File)obj1;
- File file2 = (File)obj2;
- String suffix1 = FilenameUtils.getExtension(file1.getName());
- String suffix2 = FilenameUtils.getExtension(file2.getName());
- return caseSensitivity.checkCompareTo(suffix1, suffix2);
- }
-}
diff --git a/src/org/apache/commons/io/comparator/LastModifiedFileComparator.java b/src/org/apache/commons/io/comparator/LastModifiedFileComparator.java
deleted file mode 100644
index 8265023d0..000000000
--- a/src/org/apache/commons/io/comparator/LastModifiedFileComparator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.comparator;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * Compare the last modified date/time of two files for order
- * (see {@link File#lastModified()}).
- *
- * This comparator can be used to sort lists or arrays of files
- * by their last modified date/time.
- *
- * Example of sorting a list of files using the
- * {@link #LASTMODIFIED_COMPARATOR} singleton instance:
- *
- * List<File> list = ...
- * Collections.sort(list, LastModifiedFileComparator.LASTMODIFIED_COMPARATOR);
- *
- *
- * Example of doing a reverse sort of an array of files using the
- * {@link #LASTMODIFIED_REVERSE} singleton instance:
- *
- * File[] array = ...
- * Arrays.sort(array, LastModifiedFileComparator.LASTMODIFIED_REVERSE);
- *
- *
- *
- * @version $Revision: 609243 $ $Date: 2008-01-06 00:30:42 +0000 (Sun, 06 Jan 2008) $
- * @since Commons IO 1.4
- */
-public class LastModifiedFileComparator implements Comparator, Serializable {
-
- /** Last modified comparator instance */
- public static final Comparator LASTMODIFIED_COMPARATOR = new LastModifiedFileComparator();
-
- /** Reverse last modified comparator instance */
- public static final Comparator LASTMODIFIED_REVERSE = new ReverseComparator(LASTMODIFIED_COMPARATOR);
-
- /**
- * Compare the last the last modified date/time of two files.
- *
- * @param obj1 The first file to compare
- * @param obj2 The second file to compare
- * @return a negative value if the first file's lastmodified date/time
- * is less than the second, zero if the lastmodified date/time are the
- * same and a positive value if the first files lastmodified date/time
- * is greater than the second file.
- *
- */
- public int compare(Object obj1, Object obj2) {
- File file1 = (File)obj1;
- File file2 = (File)obj2;
- long result = file1.lastModified() - file2.lastModified();
- if (result < 0) {
- return -1;
- } else if (result > 0) {
- return 1;
- } else {
- return 0;
- }
- }
-}
diff --git a/src/org/apache/commons/io/comparator/NameFileComparator.java b/src/org/apache/commons/io/comparator/NameFileComparator.java
deleted file mode 100644
index 76af21eeb..000000000
--- a/src/org/apache/commons/io/comparator/NameFileComparator.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.comparator;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.Comparator;
-
-import org.apache.commons.io.IOCase;
-
-/**
- * Compare the names of two files for order (see {@link File#getName()}).
- *
- * This comparator can be used to sort lists or arrays of files
- * by their name either in a case-sensitive, case-insensitive or
- * system dependant case sensitive way. A number of singleton instances
- * are provided for the various case sensitivity options (using {@link IOCase})
- * and the reverse of those options.
- *
- * Example of a case-sensitive file name sort using the
- * {@link #NAME_COMPARATOR} singleton instance:
- *
- * List<File> list = ...
- * Collections.sort(list, NameFileComparator.NAME_COMPARATOR);
- *
- *
- * Example of a reverse case-insensitive file name sort using the
- * {@link #NAME_INSENSITIVE_REVERSE} singleton instance:
- *
- * File[] array = ...
- * Arrays.sort(array, NameFileComparator.NAME_INSENSITIVE_REVERSE);
- *
- *
- *
- * @version $Revision: 609243 $ $Date: 2008-01-06 00:30:42 +0000 (Sun, 06 Jan 2008) $
- * @since Commons IO 1.4
- */
-public class NameFileComparator implements Comparator, Serializable {
-
- /** Case-sensitive name comparator instance (see {@link IOCase#SENSITIVE}) */
- public static final Comparator NAME_COMPARATOR = new NameFileComparator();
-
- /** Reverse case-sensitive name comparator instance (see {@link IOCase#SENSITIVE}) */
- public static final Comparator NAME_REVERSE = new ReverseComparator(NAME_COMPARATOR);
-
- /** Case-insensitive name comparator instance (see {@link IOCase#INSENSITIVE}) */
- public static final Comparator NAME_INSENSITIVE_COMPARATOR = new NameFileComparator(IOCase.INSENSITIVE);
-
- /** Reverse case-insensitive name comparator instance (see {@link IOCase#INSENSITIVE}) */
- public static final Comparator NAME_INSENSITIVE_REVERSE = new ReverseComparator(NAME_INSENSITIVE_COMPARATOR);
-
- /** System sensitive name comparator instance (see {@link IOCase#SYSTEM}) */
- public static final Comparator NAME_SYSTEM_COMPARATOR = new NameFileComparator(IOCase.SYSTEM);
-
- /** Reverse system sensitive name comparator instance (see {@link IOCase#SYSTEM}) */
- public static final Comparator NAME_SYSTEM_REVERSE = new ReverseComparator(NAME_SYSTEM_COMPARATOR);
-
- /** Whether the comparison is case sensitive. */
- private final IOCase caseSensitivity;
-
- /**
- * Construct a case sensitive file name comparator instance.
- */
- public NameFileComparator() {
- this.caseSensitivity = IOCase.SENSITIVE;
- }
-
- /**
- * Construct a file name comparator instance with the specified case-sensitivity.
- *
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- */
- public NameFileComparator(IOCase caseSensitivity) {
- this.caseSensitivity = caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity;
- }
-
- /**
- * Compare the names of two files with the specified case sensitivity.
- *
- * @param obj1 The first file to compare
- * @param obj2 The second file to compare
- * @return a negative value if the first file's name
- * is less than the second, zero if the names are the
- * same and a positive value if the first files name
- * is greater than the second file.
- */
- public int compare(Object obj1, Object obj2) {
- File file1 = (File)obj1;
- File file2 = (File)obj2;
- return caseSensitivity.checkCompareTo(file1.getName(), file2.getName());
- }
-}
diff --git a/src/org/apache/commons/io/comparator/PathFileComparator.java b/src/org/apache/commons/io/comparator/PathFileComparator.java
deleted file mode 100644
index 0b28b6960..000000000
--- a/src/org/apache/commons/io/comparator/PathFileComparator.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.comparator;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.Comparator;
-
-import org.apache.commons.io.IOCase;
-
-/**
- * Compare the path of two files for order (see {@link File#getPath()}).
- *
- * This comparator can be used to sort lists or arrays of files
- * by their path either in a case-sensitive, case-insensitive or
- * system dependant case sensitive way. A number of singleton instances
- * are provided for the various case sensitivity options (using {@link IOCase})
- * and the reverse of those options.
- *
- * Example of a case-sensitive file path sort using the
- * {@link #PATH_COMPARATOR} singleton instance:
- *
- * List<File> list = ...
- * Collections.sort(list, PathFileComparator.PATH_COMPARATOR);
- *
- *
- * Example of a reverse case-insensitive file path sort using the
- * {@link #PATH_INSENSITIVE_REVERSE} singleton instance:
- *
- * File[] array = ...
- * Arrays.sort(array, PathFileComparator.PATH_INSENSITIVE_REVERSE);
- *
- *
- *
- * @version $Revision: 609243 $ $Date: 2008-01-06 00:30:42 +0000 (Sun, 06 Jan 2008) $
- * @since Commons IO 1.4
- */
-public class PathFileComparator implements Comparator, Serializable {
-
- /** Case-sensitive path comparator instance (see {@link IOCase#SENSITIVE}) */
- public static final Comparator PATH_COMPARATOR = new PathFileComparator();
-
- /** Reverse case-sensitive path comparator instance (see {@link IOCase#SENSITIVE}) */
- public static final Comparator PATH_REVERSE = new ReverseComparator(PATH_COMPARATOR);
-
- /** Case-insensitive path comparator instance (see {@link IOCase#INSENSITIVE}) */
- public static final Comparator PATH_INSENSITIVE_COMPARATOR = new PathFileComparator(IOCase.INSENSITIVE);
-
- /** Reverse case-insensitive path comparator instance (see {@link IOCase#INSENSITIVE}) */
- public static final Comparator PATH_INSENSITIVE_REVERSE = new ReverseComparator(PATH_INSENSITIVE_COMPARATOR);
-
- /** System sensitive path comparator instance (see {@link IOCase#SYSTEM}) */
- public static final Comparator PATH_SYSTEM_COMPARATOR = new PathFileComparator(IOCase.SYSTEM);
-
- /** Reverse system sensitive path comparator instance (see {@link IOCase#SYSTEM}) */
- public static final Comparator PATH_SYSTEM_REVERSE = new ReverseComparator(PATH_SYSTEM_COMPARATOR);
-
- /** Whether the comparison is case sensitive. */
- private final IOCase caseSensitivity;
-
- /**
- * Construct a case sensitive file path comparator instance.
- */
- public PathFileComparator() {
- this.caseSensitivity = IOCase.SENSITIVE;
- }
-
- /**
- * Construct a file path comparator instance with the specified case-sensitivity.
- *
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- */
- public PathFileComparator(IOCase caseSensitivity) {
- this.caseSensitivity = caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity;
- }
-
- /**
- * Compare the paths of two files the specified case sensitivity.
- *
- * @param obj1 The first file to compare
- * @param obj2 The second file to compare
- * @return a negative value if the first file's path
- * is less than the second, zero if the paths are the
- * same and a positive value if the first files path
- * is greater than the second file.
- *
- */
- public int compare(Object obj1, Object obj2) {
- File file1 = (File)obj1;
- File file2 = (File)obj2;
- return caseSensitivity.checkCompareTo(file1.getPath(), file2.getPath());
- }
-}
diff --git a/src/org/apache/commons/io/comparator/ReverseComparator.java b/src/org/apache/commons/io/comparator/ReverseComparator.java
deleted file mode 100644
index af9749ee3..000000000
--- a/src/org/apache/commons/io/comparator/ReverseComparator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.comparator;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * Reverses the result of comparing two objects using
- * the delegate {@link Comparator}.
- *
- * @version $Revision: 609243 $ $Date: 2008-01-06 00:30:42 +0000 (Sun, 06 Jan 2008) $
- * @since Commons IO 1.4
- */
-class ReverseComparator implements Comparator, Serializable {
-
- private final Comparator delegate;
-
- /**
- * Construct an instance with the sepecified delegate {@link Comparator}.
- *
- * @param delegate The comparator to delegate to
- */
- public ReverseComparator(Comparator delegate) {
- if (delegate == null) {
- throw new IllegalArgumentException("Delegate comparator is missing");
- }
- this.delegate = delegate;
- }
-
- /**
- * Compare using the delegate Comparator, but reversing the result.
- *
- * @param obj1 The first object to compare
- * @param obj2 The second object to compare
- * @return the result from the delegate {@link Comparator#compare(Object, Object)}
- * reversing the value (i.e. positive becomes negative and vice versa)
- */
- public int compare(Object obj1, Object obj2) {
- return delegate.compare(obj2, obj1); // parameters switched round
- }
-
-}
diff --git a/src/org/apache/commons/io/comparator/SizeFileComparator.java b/src/org/apache/commons/io/comparator/SizeFileComparator.java
deleted file mode 100644
index a1621671c..000000000
--- a/src/org/apache/commons/io/comparator/SizeFileComparator.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.comparator;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.Comparator;
-
-import org.apache.commons.io.FileUtils;
-
-/**
- * Compare the length/size of two files for order (see
- * {@link File#length()} and {@link FileUtils#sizeOfDirectory(File)}).
- *
- * This comparator can be used to sort lists or arrays of files
- * by their length/size.
- *
- * Example of sorting a list of files using the
- * {@link #SIZE_COMPARATOR} singleton instance:
- *
- * List<File> list = ...
- * Collections.sort(list, LengthFileComparator.LENGTH_COMPARATOR);
- *
- *
- * Example of doing a reverse sort of an array of files using the
- * {@link #SIZE_REVERSE} singleton instance:
- *
- * File[] array = ...
- * Arrays.sort(array, LengthFileComparator.LENGTH_REVERSE);
- *
- *
- * N.B. Directories are treated as zero size unless
- * sumDirectoryContents
is true
.
- *
- * @version $Revision: 609243 $ $Date: 2008-01-06 00:30:42 +0000 (Sun, 06 Jan 2008) $
- * @since Commons IO 1.4
- */
-public class SizeFileComparator implements Comparator, Serializable {
-
- /** Size comparator instance - directories are treated as zero size */
- public static final Comparator SIZE_COMPARATOR = new SizeFileComparator();
-
- /** Reverse size comparator instance - directories are treated as zero size */
- public static final Comparator SIZE_REVERSE = new ReverseComparator(SIZE_COMPARATOR);
-
- /**
- * Size comparator instance which sums the size of a directory's contents
- * using {@link FileUtils#sizeOfDirectory(File)}
- */
- public static final Comparator SIZE_SUMDIR_COMPARATOR = new SizeFileComparator(true);
-
- /**
- * Reverse size comparator instance which sums the size of a directory's contents
- * using {@link FileUtils#sizeOfDirectory(File)}
- */
- public static final Comparator SIZE_SUMDIR_REVERSE = new ReverseComparator(SIZE_SUMDIR_COMPARATOR);
-
- /** Whether the sum of the directory's contents should be calculated. */
- private final boolean sumDirectoryContents;
-
- /**
- * Construct a file size comparator instance (directories treated as zero size).
- */
- public SizeFileComparator() {
- this.sumDirectoryContents = false;
- }
-
- /**
- * Construct a file size comparator instance specifying whether the size of
- * the directory contents should be aggregated.
- *
- * If the sumDirectoryContents
is true
The size of
- * directories is calculated using {@link FileUtils#sizeOfDirectory(File)}.
- *
- * @param sumDirectoryContents true
if the sum of the directoryies contents
- * should be calculated, otherwise false
if directories should be treated
- * as size zero (see {@link FileUtils#sizeOfDirectory(File)}).
- */
- public SizeFileComparator(boolean sumDirectoryContents) {
- this.sumDirectoryContents = sumDirectoryContents;
- }
-
- /**
- * Compare the length of two files.
- *
- * @param obj1 The first file to compare
- * @param obj2 The second file to compare
- * @return a negative value if the first file's length
- * is less than the second, zero if the lengths are the
- * same and a positive value if the first files length
- * is greater than the second file.
- *
- */
- public int compare(Object obj1, Object obj2) {
- File file1 = (File)obj1;
- File file2 = (File)obj2;
- long size1 = 0;
- if (file1.isDirectory()) {
- size1 = sumDirectoryContents && file1.exists() ? FileUtils.sizeOfDirectory(file1) : 0;
- } else {
- size1 = file1.length();
- }
- long size2 = 0;
- if (file2.isDirectory()) {
- size2 = sumDirectoryContents && file2.exists() ? FileUtils.sizeOfDirectory(file2) : 0;
- } else {
- size2 = file2.length();
- }
- long result = size1 - size2;
- if (result < 0) {
- return -1;
- } else if (result > 0) {
- return 1;
- } else {
- return 0;
- }
- }
-}
diff --git a/src/org/apache/commons/io/comparator/package.html b/src/org/apache/commons/io/comparator/package.html
deleted file mode 100644
index a2f756f18..000000000
--- a/src/org/apache/commons/io/comparator/package.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-This package provides various {@link java.util.Comparator} implementations
-for {@link java.io.File}s.
-
-
-
-
diff --git a/src/org/apache/commons/io/filefilter/AbstractFileFilter.java b/src/org/apache/commons/io/filefilter/AbstractFileFilter.java
deleted file mode 100644
index 9e188f82e..000000000
--- a/src/org/apache/commons/io/filefilter/AbstractFileFilter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-
-/**
- * An abstract class which implements the Java FileFilter and FilenameFilter
- * interfaces via the IOFileFilter interface.
- *
- * Note that a subclass must override one of the accept methods,
- * otherwise your class will infinitely loop.
- *
- * @since Commons IO 1.0
- * @version $Revision: 539231 $ $Date: 2007-05-18 04:10:33 +0100 (Fri, 18 May 2007) $
- *
- * @author Stephen Colebourne
- */
-public abstract class AbstractFileFilter implements IOFileFilter {
-
- /**
- * Checks to see if the File should be accepted by this filter.
- *
- * @param file the File to check
- * @return true if this file matches the test
- */
- public boolean accept(File file) {
- return accept(file.getParentFile(), file.getName());
- }
-
- /**
- * Checks to see if the File should be accepted by this filter.
- *
- * @param dir the directory File to check
- * @param name the filename within the directory to check
- * @return true if this file matches the test
- */
- public boolean accept(File dir, String name) {
- return accept(new File(dir, name));
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- String name = getClass().getName();
- int period = name.lastIndexOf('.');
- return (period > 0 ? name.substring(period + 1) : name);
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/AgeFileFilter.java b/src/org/apache/commons/io/filefilter/AgeFileFilter.java
deleted file mode 100644
index ab73cb840..000000000
--- a/src/org/apache/commons/io/filefilter/AgeFileFilter.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.Date;
-
-import org.apache.commons.io.FileUtils;
-
-/**
- * Filters files based on a cutoff time, can filter either newer
- * files or files equal to or older.
- *
- * For example, to print all files and directories in the
- * current directory older than one day:
- *
- *
- * File dir = new File(".");
- * // We are interested in files older than one day
- * long cutoff = System.currentTimeMillis() - (24 * 60 * 60 * 1000);
- * String[] files = dir.list( new AgeFileFilter(cutoff) );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @author Rahul Akolkar
- * @version $Id: AgeFileFilter.java 606381 2007-12-22 02:03:16Z ggregory $
- * @since Commons IO 1.2
- */
-public class AgeFileFilter extends AbstractFileFilter implements Serializable {
-
- /** The cutoff time threshold. */
- private final long cutoff;
- /** Whether the files accepted will be older or newer. */
- private final boolean acceptOlder;
-
- /**
- * Constructs a new age file filter for files equal to or older than
- * a certain cutoff
- *
- * @param cutoff the threshold age of the files
- */
- public AgeFileFilter(long cutoff) {
- this(cutoff, true);
- }
-
- /**
- * Constructs a new age file filter for files on any one side
- * of a certain cutoff.
- *
- * @param cutoff the threshold age of the files
- * @param acceptOlder if true, older files (at or before the cutoff)
- * are accepted, else newer ones (after the cutoff).
- */
- public AgeFileFilter(long cutoff, boolean acceptOlder) {
- this.acceptOlder = acceptOlder;
- this.cutoff = cutoff;
- }
-
- /**
- * Constructs a new age file filter for files older than (at or before)
- * a certain cutoff date.
- *
- * @param cutoffDate the threshold age of the files
- */
- public AgeFileFilter(Date cutoffDate) {
- this(cutoffDate, true);
- }
-
- /**
- * Constructs a new age file filter for files on any one side
- * of a certain cutoff date.
- *
- * @param cutoffDate the threshold age of the files
- * @param acceptOlder if true, older files (at or before the cutoff)
- * are accepted, else newer ones (after the cutoff).
- */
- public AgeFileFilter(Date cutoffDate, boolean acceptOlder) {
- this(cutoffDate.getTime(), acceptOlder);
- }
-
- /**
- * Constructs a new age file filter for files older than (at or before)
- * a certain File (whose last modification time will be used as reference).
- *
- * @param cutoffReference the file whose last modification
- * time is usesd as the threshold age of the files
- */
- public AgeFileFilter(File cutoffReference) {
- this(cutoffReference, true);
- }
-
- /**
- * Constructs a new age file filter for files on any one side
- * of a certain File (whose last modification time will be used as
- * reference).
- *
- * @param cutoffReference the file whose last modification
- * time is usesd as the threshold age of the files
- * @param acceptOlder if true, older files (at or before the cutoff)
- * are accepted, else newer ones (after the cutoff).
- */
- public AgeFileFilter(File cutoffReference, boolean acceptOlder) {
- this(cutoffReference.lastModified(), acceptOlder);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks to see if the last modification of the file matches cutoff
- * favorably.
- *
- * If last modification time equals cutoff and newer files are required,
- * file IS NOT selected.
- * If last modification time equals cutoff and older files are required,
- * file IS selected.
- *
- * @param file the File to check
- * @return true if the filename matches
- */
- public boolean accept(File file) {
- boolean newer = FileUtils.isFileNewer(file, cutoff);
- return acceptOlder ? !newer : newer;
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- String condition = acceptOlder ? "<=" : ">";
- return super.toString() + "(" + condition + cutoff + ")";
- }
-}
diff --git a/src/org/apache/commons/io/filefilter/AndFileFilter.java b/src/org/apache/commons/io/filefilter/AndFileFilter.java
deleted file mode 100644
index deda11f93..000000000
--- a/src/org/apache/commons/io/filefilter/AndFileFilter.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * A {@link java.io.FileFilter} providing conditional AND logic across a list of
- * file filters. This filter returns true
if all filters in the
- * list return true
. Otherwise, it returns false
.
- * Checking of the file filter list stops when the first filter returns
- * false
.
- *
- * @since Commons IO 1.0
- * @version $Revision: 606381 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $
- *
- * @author Steven Caswell
- */
-public class AndFileFilter
- extends AbstractFileFilter
- implements ConditionalFileFilter, Serializable {
-
- /** The list of file filters. */
- private List fileFilters;
-
- /**
- * Constructs a new instance of AndFileFilter
.
- *
- * @since Commons IO 1.1
- */
- public AndFileFilter() {
- this.fileFilters = new ArrayList();
- }
-
- /**
- * Constructs a new instance of AndFileFilter
- * with the specified list of filters.
- *
- * @param fileFilters a List of IOFileFilter instances, copied, null ignored
- * @since Commons IO 1.1
- */
- public AndFileFilter(final List fileFilters) {
- if (fileFilters == null) {
- this.fileFilters = new ArrayList();
- } else {
- this.fileFilters = new ArrayList(fileFilters);
- }
- }
-
- /**
- * Constructs a new file filter that ANDs the result of two other filters.
- *
- * @param filter1 the first filter, must not be null
- * @param filter2 the second filter, must not be null
- * @throws IllegalArgumentException if either filter is null
- */
- public AndFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
- if (filter1 == null || filter2 == null) {
- throw new IllegalArgumentException("The filters must not be null");
- }
- this.fileFilters = new ArrayList();
- addFileFilter(filter1);
- addFileFilter(filter2);
- }
-
- /**
- * {@inheritDoc}
- */
- public void addFileFilter(final IOFileFilter ioFileFilter) {
- this.fileFilters.add(ioFileFilter);
- }
-
- /**
- * {@inheritDoc}
- */
- public List getFileFilters() {
- return Collections.unmodifiableList(this.fileFilters);
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean removeFileFilter(final IOFileFilter ioFileFilter) {
- return this.fileFilters.remove(ioFileFilter);
- }
-
- /**
- * {@inheritDoc}
- */
- public void setFileFilters(final List fileFilters) {
- this.fileFilters = new ArrayList(fileFilters);
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean accept(final File file) {
- if (this.fileFilters.size() == 0) {
- return false;
- }
- for (Iterator iter = this.fileFilters.iterator(); iter.hasNext();) {
- IOFileFilter fileFilter = (IOFileFilter) iter.next();
- if (!fileFilter.accept(file)) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean accept(final File file, final String name) {
- if (this.fileFilters.size() == 0) {
- return false;
- }
- for (Iterator iter = this.fileFilters.iterator(); iter.hasNext();) {
- IOFileFilter fileFilter = (IOFileFilter) iter.next();
- if (!fileFilter.accept(file, name)) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append(super.toString());
- buffer.append("(");
- if (fileFilters != null) {
- for (int i = 0; i < fileFilters.size(); i++) {
- if (i > 0) {
- buffer.append(",");
- }
- Object filter = fileFilters.get(i);
- buffer.append(filter == null ? "null" : filter.toString());
- }
- }
- buffer.append(")");
- return buffer.toString();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/CanReadFileFilter.java b/src/org/apache/commons/io/filefilter/CanReadFileFilter.java
deleted file mode 100644
index a9c132570..000000000
--- a/src/org/apache/commons/io/filefilter/CanReadFileFilter.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * This filter accepts File
s that can be read.
- *
- * Example, showing how to print out a list of the
- * current directory's readable files:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( CanReadFileFilter.CAN_READ );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- *
- * Example, showing how to print out a list of the
- * current directory's un-readable files:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( CanReadFileFilter.CANNOT_READ );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- *
- * Example, showing how to print out a list of the
- * current directory's read-only files:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( CanReadFileFilter.READ_ONLY );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @since Commons IO 1.3
- * @version $Revision: 587916 $
- */
-public class CanReadFileFilter extends AbstractFileFilter implements Serializable {
-
- /** Singleton instance of readable filter */
- public static final IOFileFilter CAN_READ = new CanReadFileFilter();
-
- /** Singleton instance of not readable filter */
- public static final IOFileFilter CANNOT_READ = new NotFileFilter(CAN_READ);
-
- /** Singleton instance of read-only filter */
- public static final IOFileFilter READ_ONLY = new AndFileFilter(CAN_READ,
- CanWriteFileFilter.CANNOT_WRITE);
-
- /**
- * Restrictive consructor.
- */
- protected CanReadFileFilter() {
- }
-
- /**
- * Checks to see if the file can be read.
- *
- * @param file the File to check.
- * @return true
if the file can be
- * read, otherwise false
.
- */
- public boolean accept(File file) {
- return file.canRead();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/CanWriteFileFilter.java b/src/org/apache/commons/io/filefilter/CanWriteFileFilter.java
deleted file mode 100644
index da664f25c..000000000
--- a/src/org/apache/commons/io/filefilter/CanWriteFileFilter.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * This filter accepts File
s that can be written to.
- *
- * Example, showing how to print out a list of the
- * current directory's writable files:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( CanWriteFileFilter.CAN_WRITE );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- *
- * Example, showing how to print out a list of the
- * current directory's un-writable files:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( CanWriteFileFilter.CANNOT_WRITE );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- *
- * N.B. For read-only files, use
- * CanReadFileFilter.READ_ONLY
.
- *
- * @since Commons IO 1.3
- * @version $Revision: 587916 $
- */
-public class CanWriteFileFilter extends AbstractFileFilter implements Serializable {
-
- /** Singleton instance of writable filter */
- public static final IOFileFilter CAN_WRITE = new CanWriteFileFilter();
-
- /** Singleton instance of not writable filter */
- public static final IOFileFilter CANNOT_WRITE = new NotFileFilter(CAN_WRITE);
-
- /**
- * Restrictive consructor.
- */
- protected CanWriteFileFilter() {
- }
-
- /**
- * Checks to see if the file can be written to.
- *
- * @param file the File to check
- * @return true
if the file can be
- * written to, otherwise false
.
- */
- public boolean accept(File file) {
- return file.canWrite();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/ConditionalFileFilter.java b/src/org/apache/commons/io/filefilter/ConditionalFileFilter.java
deleted file mode 100644
index ce1419ee8..000000000
--- a/src/org/apache/commons/io/filefilter/ConditionalFileFilter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.util.List;
-
-/**
- * Defines operations for conditional file filters.
- *
- * @since Commons IO 1.1
- * @version $Revision: 437567 $ $Date: 2006-08-28 07:39:07 +0100 (Mon, 28 Aug 2006) $
- *
- * @author Steven Caswell
- */
-public interface ConditionalFileFilter {
-
- /**
- * Adds the specified file filter to the list of file filters at the end of
- * the list.
- *
- * @param ioFileFilter the filter to be added
- * @since Commons IO 1.1
- */
- public void addFileFilter(IOFileFilter ioFileFilter);
-
- /**
- * Returns this conditional file filter's list of file filters.
- *
- * @return the file filter list
- * @since Commons IO 1.1
- */
- public List getFileFilters();
-
- /**
- * Removes the specified file filter.
- *
- * @param ioFileFilter filter to be removed
- * @return true
if the filter was found in the list,
- * false
otherwise
- * @since Commons IO 1.1
- */
- public boolean removeFileFilter(IOFileFilter ioFileFilter);
-
- /**
- * Sets the list of file filters, replacing any previously configured
- * file filters on this filter.
- *
- * @param fileFilters the list of filters
- * @since Commons IO 1.1
- */
- public void setFileFilters(List fileFilters);
-
-}
diff --git a/src/org/apache/commons/io/filefilter/DelegateFileFilter.java b/src/org/apache/commons/io/filefilter/DelegateFileFilter.java
deleted file mode 100644
index c2d67c469..000000000
--- a/src/org/apache/commons/io/filefilter/DelegateFileFilter.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FilenameFilter;
-import java.io.Serializable;
-
-/**
- * This class turns a Java FileFilter or FilenameFilter into an IO FileFilter.
- *
- * @since Commons IO 1.0
- * @version $Revision: 591058 $ $Date: 2007-11-01 15:47:05 +0000 (Thu, 01 Nov 2007) $
- *
- * @author Stephen Colebourne
- */
-public class DelegateFileFilter extends AbstractFileFilter implements Serializable {
-
- /** The Filename filter */
- private final FilenameFilter filenameFilter;
- /** The File filter */
- private final FileFilter fileFilter;
-
- /**
- * Constructs a delegate file filter around an existing FilenameFilter.
- *
- * @param filter the filter to decorate
- */
- public DelegateFileFilter(FilenameFilter filter) {
- if (filter == null) {
- throw new IllegalArgumentException("The FilenameFilter must not be null");
- }
- this.filenameFilter = filter;
- this.fileFilter = null;
- }
-
- /**
- * Constructs a delegate file filter around an existing FileFilter.
- *
- * @param filter the filter to decorate
- */
- public DelegateFileFilter(FileFilter filter) {
- if (filter == null) {
- throw new IllegalArgumentException("The FileFilter must not be null");
- }
- this.fileFilter = filter;
- this.filenameFilter = null;
- }
-
- /**
- * Checks the filter.
- *
- * @param file the file to check
- * @return true if the filter matches
- */
- public boolean accept(File file) {
- if (fileFilter != null) {
- return fileFilter.accept(file);
- } else {
- return super.accept(file);
- }
- }
-
- /**
- * Checks the filter.
- *
- * @param dir the directory
- * @param name the filename in the directory
- * @return true if the filter matches
- */
- public boolean accept(File dir, String name) {
- if (filenameFilter != null) {
- return filenameFilter.accept(dir, name);
- } else {
- return super.accept(dir, name);
- }
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- String delegate = (fileFilter != null ? fileFilter.toString() : filenameFilter.toString());
- return super.toString() + "(" + delegate + ")";
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/DirectoryFileFilter.java b/src/org/apache/commons/io/filefilter/DirectoryFileFilter.java
deleted file mode 100644
index 3412e7bef..000000000
--- a/src/org/apache/commons/io/filefilter/DirectoryFileFilter.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * This filter accepts File
s that are directories.
- *
- * For example, here is how to print out a list of the
- * current directory's subdirectories:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( DirectoryFileFilter.INSTANCE );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @since Commons IO 1.0
- * @version $Revision: 587916 $ $Date: 2007-10-24 16:53:07 +0100 (Wed, 24 Oct 2007) $
- *
- * @author Stephen Colebourne
- * @author Peter Donald
- */
-public class DirectoryFileFilter extends AbstractFileFilter implements Serializable {
-
- /**
- * Singleton instance of directory filter.
- * @since Commons IO 1.3
- */
- public static final IOFileFilter DIRECTORY = new DirectoryFileFilter();
- /**
- * Singleton instance of directory filter.
- * Please use the identical DirectoryFileFilter.DIRECTORY constant.
- * The new name is more JDK 1.5 friendly as it doesn't clash with other
- * values when using static imports.
- */
- public static final IOFileFilter INSTANCE = DIRECTORY;
-
- /**
- * Restrictive consructor.
- */
- protected DirectoryFileFilter() {
- }
-
- /**
- * Checks to see if the file is a directory.
- *
- * @param file the File to check
- * @return true if the file is a directory
- */
- public boolean accept(File file) {
- return file.isDirectory();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/EmptyFileFilter.java b/src/org/apache/commons/io/filefilter/EmptyFileFilter.java
deleted file mode 100644
index e88a862d4..000000000
--- a/src/org/apache/commons/io/filefilter/EmptyFileFilter.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * This filter accepts files or directories that are empty.
- *
- * If the File
is a directory it checks that
- * it contains no files.
- *
- * Example, showing how to print out a list of the
- * current directory's empty files/directories:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( EmptyFileFilter.EMPTY );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- *
- * Example, showing how to print out a list of the
- * current directory's non-empty files/directories:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( EmptyFileFilter.NOT_EMPTY );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @since Commons IO 1.3
- * @version $Revision: 587916 $
- */
-public class EmptyFileFilter extends AbstractFileFilter implements Serializable {
-
- /** Singleton instance of empty filter */
- public static final IOFileFilter EMPTY = new EmptyFileFilter();
-
- /** Singleton instance of not-empty filter */
- public static final IOFileFilter NOT_EMPTY = new NotFileFilter(EMPTY);
-
- /**
- * Restrictive consructor.
- */
- protected EmptyFileFilter() {
- }
-
- /**
- * Checks to see if the file is empty.
- *
- * @param file the file or directory to check
- * @return true
if the file or directory
- * is empty, otherwise false
.
- */
- public boolean accept(File file) {
- if (file.isDirectory()) {
- File[] files = file.listFiles();
- return (files == null || files.length == 0);
- } else {
- return (file.length() == 0);
- }
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/FalseFileFilter.java b/src/org/apache/commons/io/filefilter/FalseFileFilter.java
deleted file mode 100644
index 8a87d4092..000000000
--- a/src/org/apache/commons/io/filefilter/FalseFileFilter.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * A file filter that always returns false.
- *
- * @since Commons IO 1.0
- * @version $Revision: 587978 $ $Date: 2007-10-24 20:36:51 +0100 (Wed, 24 Oct 2007) $
- *
- * @author Stephen Colebourne
- */
-public class FalseFileFilter implements IOFileFilter, Serializable {
-
- /**
- * Singleton instance of false filter.
- * @since Commons IO 1.3
- */
- public static final IOFileFilter FALSE = new FalseFileFilter();
- /**
- * Singleton instance of false filter.
- * Please use the identical FalseFileFilter.FALSE constant.
- * The new name is more JDK 1.5 friendly as it doesn't clash with other
- * values when using static imports.
- */
- public static final IOFileFilter INSTANCE = FALSE;
-
- /**
- * Restrictive consructor.
- */
- protected FalseFileFilter() {
- }
-
- /**
- * Returns false.
- *
- * @param file the file to check
- * @return false
- */
- public boolean accept(File file) {
- return false;
- }
-
- /**
- * Returns false.
- *
- * @param dir the directory to check
- * @param name the filename
- * @return false
- */
- public boolean accept(File dir, String name) {
- return false;
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/FileFileFilter.java b/src/org/apache/commons/io/filefilter/FileFileFilter.java
deleted file mode 100644
index 0d49eddd4..000000000
--- a/src/org/apache/commons/io/filefilter/FileFileFilter.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * This filter accepts File
s that are files (not directories).
- *
- * For example, here is how to print out a list of the real files
- * within the current directory:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( FileFileFilter.FILE );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @since Commons IO 1.3
- * @version $Revision: 155419 $ $Date: 2007-10-24 16:53:07 +0100 (Wed, 24 Oct 2007) $
- */
-public class FileFileFilter extends AbstractFileFilter implements Serializable {
-
- /** Singleton instance of file filter */
- public static final IOFileFilter FILE = new FileFileFilter();
-
- /**
- * Restrictive consructor.
- */
- protected FileFileFilter() {
- }
-
- /**
- * Checks to see if the file is a file.
- *
- * @param file the File to check
- * @return true if the file is a file
- */
- public boolean accept(File file) {
- return file.isFile();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/FileFilterUtils.java b/src/org/apache/commons/io/filefilter/FileFilterUtils.java
deleted file mode 100644
index 71c37b1d2..000000000
--- a/src/org/apache/commons/io/filefilter/FileFilterUtils.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FilenameFilter;
-import java.util.Date;
-
-/**
- * Useful utilities for working with file filters. It provides access to all
- * file filter implementations in this package so you don't have to import
- * every class you use.
- *
- * @since Commons IO 1.0
- * @version $Id: FileFilterUtils.java 609286 2008-01-06 10:01:26Z scolebourne $
- *
- * @author Stephen Colebourne
- * @author Jeremias Maerki
- * @author Masato Tezuka
- * @author Rahul Akolkar
- */
-public class FileFilterUtils {
-
- /**
- * FileFilterUtils is not normally instantiated.
- */
- public FileFilterUtils() {
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns a filter that returns true if the filename starts with the specified text.
- *
- * @param prefix the filename prefix
- * @return a prefix checking filter
- */
- public static IOFileFilter prefixFileFilter(String prefix) {
- return new PrefixFileFilter(prefix);
- }
-
- /**
- * Returns a filter that returns true if the filename ends with the specified text.
- *
- * @param suffix the filename suffix
- * @return a suffix checking filter
- */
- public static IOFileFilter suffixFileFilter(String suffix) {
- return new SuffixFileFilter(suffix);
- }
-
- /**
- * Returns a filter that returns true if the filename matches the specified text.
- *
- * @param name the filename
- * @return a name checking filter
- */
- public static IOFileFilter nameFileFilter(String name) {
- return new NameFileFilter(name);
- }
-
- /**
- * Returns a filter that checks if the file is a directory.
- *
- * @return file filter that accepts only directories and not files
- */
- public static IOFileFilter directoryFileFilter() {
- return DirectoryFileFilter.DIRECTORY;
- }
-
- /**
- * Returns a filter that checks if the file is a file (and not a directory).
- *
- * @return file filter that accepts only files and not directories
- */
- public static IOFileFilter fileFileFilter() {
- return FileFileFilter.FILE;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns a filter that ANDs the two specified filters.
- *
- * @param filter1 the first filter
- * @param filter2 the second filter
- * @return a filter that ANDs the two specified filters
- */
- public static IOFileFilter andFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
- return new AndFileFilter(filter1, filter2);
- }
-
- /**
- * Returns a filter that ORs the two specified filters.
- *
- * @param filter1 the first filter
- * @param filter2 the second filter
- * @return a filter that ORs the two specified filters
- */
- public static IOFileFilter orFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
- return new OrFileFilter(filter1, filter2);
- }
-
- /**
- * Returns a filter that NOTs the specified filter.
- *
- * @param filter the filter to invert
- * @return a filter that NOTs the specified filter
- */
- public static IOFileFilter notFileFilter(IOFileFilter filter) {
- return new NotFileFilter(filter);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns a filter that always returns true.
- *
- * @return a true filter
- */
- public static IOFileFilter trueFileFilter() {
- return TrueFileFilter.TRUE;
- }
-
- /**
- * Returns a filter that always returns false.
- *
- * @return a false filter
- */
- public static IOFileFilter falseFileFilter() {
- return FalseFileFilter.FALSE;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns an IOFileFilter
that wraps the
- * FileFilter
instance.
- *
- * @param filter the filter to be wrapped
- * @return a new filter that implements IOFileFilter
- */
- public static IOFileFilter asFileFilter(FileFilter filter) {
- return new DelegateFileFilter(filter);
- }
-
- /**
- * Returns an IOFileFilter
that wraps the
- * FilenameFilter
instance.
- *
- * @param filter the filter to be wrapped
- * @return a new filter that implements IOFileFilter
- */
- public static IOFileFilter asFileFilter(FilenameFilter filter) {
- return new DelegateFileFilter(filter);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns a filter that returns true if the file was last modified after
- * the specified cutoff time.
- *
- * @param cutoff the time threshold
- * @return an appropriately configured age file filter
- * @since Commons IO 1.2
- */
- public static IOFileFilter ageFileFilter(long cutoff) {
- return new AgeFileFilter(cutoff);
- }
-
- /**
- * Returns a filter that filters files based on a cutoff time.
- *
- * @param cutoff the time threshold
- * @param acceptOlder if true, older files get accepted, if false, newer
- * @return an appropriately configured age file filter
- * @since Commons IO 1.2
- */
- public static IOFileFilter ageFileFilter(long cutoff, boolean acceptOlder) {
- return new AgeFileFilter(cutoff, acceptOlder);
- }
-
- /**
- * Returns a filter that returns true if the file was last modified after
- * the specified cutoff date.
- *
- * @param cutoffDate the time threshold
- * @return an appropriately configured age file filter
- * @since Commons IO 1.2
- */
- public static IOFileFilter ageFileFilter(Date cutoffDate) {
- return new AgeFileFilter(cutoffDate);
- }
-
- /**
- * Returns a filter that filters files based on a cutoff date.
- *
- * @param cutoffDate the time threshold
- * @param acceptOlder if true, older files get accepted, if false, newer
- * @return an appropriately configured age file filter
- * @since Commons IO 1.2
- */
- public static IOFileFilter ageFileFilter(Date cutoffDate, boolean acceptOlder) {
- return new AgeFileFilter(cutoffDate, acceptOlder);
- }
-
- /**
- * Returns a filter that returns true if the file was last modified after
- * the specified reference file.
- *
- * @param cutoffReference the file whose last modification
- * time is usesd as the threshold age of the files
- * @return an appropriately configured age file filter
- * @since Commons IO 1.2
- */
- public static IOFileFilter ageFileFilter(File cutoffReference) {
- return new AgeFileFilter(cutoffReference);
- }
-
- /**
- * Returns a filter that filters files based on a cutoff reference file.
- *
- * @param cutoffReference the file whose last modification
- * time is usesd as the threshold age of the files
- * @param acceptOlder if true, older files get accepted, if false, newer
- * @return an appropriately configured age file filter
- * @since Commons IO 1.2
- */
- public static IOFileFilter ageFileFilter(File cutoffReference, boolean acceptOlder) {
- return new AgeFileFilter(cutoffReference, acceptOlder);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Returns a filter that returns true if the file is bigger than a certain size.
- *
- * @param threshold the file size threshold
- * @return an appropriately configured SizeFileFilter
- * @since Commons IO 1.2
- */
- public static IOFileFilter sizeFileFilter(long threshold) {
- return new SizeFileFilter(threshold);
- }
-
- /**
- * Returns a filter that filters based on file size.
- *
- * @param threshold the file size threshold
- * @param acceptLarger if true, larger files get accepted, if false, smaller
- * @return an appropriately configured SizeFileFilter
- * @since Commons IO 1.2
- */
- public static IOFileFilter sizeFileFilter(long threshold, boolean acceptLarger) {
- return new SizeFileFilter(threshold, acceptLarger);
- }
-
- /**
- * Returns a filter that accepts files whose size is >= minimum size
- * and <= maximum size.
- *
- * @param minSizeInclusive the minimum file size (inclusive)
- * @param maxSizeInclusive the maximum file size (inclusive)
- * @return an appropriately configured IOFileFilter
- * @since Commons IO 1.3
- */
- public static IOFileFilter sizeRangeFileFilter(long minSizeInclusive, long maxSizeInclusive ) {
- IOFileFilter minimumFilter = new SizeFileFilter(minSizeInclusive, true);
- IOFileFilter maximumFilter = new SizeFileFilter(maxSizeInclusive + 1L, false);
- return new AndFileFilter(minimumFilter, maximumFilter);
- }
-
- //-----------------------------------------------------------------------
- /* Constructed on demand and then cached */
- private static IOFileFilter cvsFilter;
-
- /* Constructed on demand and then cached */
- private static IOFileFilter svnFilter;
-
- /**
- * Decorates a filter to make it ignore CVS directories.
- * Passing in null
will return a filter that accepts everything
- * except CVS directories.
- *
- * @param filter the filter to decorate, null means an unrestricted filter
- * @return the decorated filter, never null
- * @since Commons IO 1.1 (method existed but had bug in 1.0)
- */
- public static IOFileFilter makeCVSAware(IOFileFilter filter) {
- if (cvsFilter == null) {
- cvsFilter = notFileFilter(
- andFileFilter(directoryFileFilter(), nameFileFilter("CVS")));
- }
- if (filter == null) {
- return cvsFilter;
- } else {
- return andFileFilter(filter, cvsFilter);
- }
- }
-
- /**
- * Decorates a filter to make it ignore SVN directories.
- * Passing in null
will return a filter that accepts everything
- * except SVN directories.
- *
- * @param filter the filter to decorate, null means an unrestricted filter
- * @return the decorated filter, never null
- * @since Commons IO 1.1
- */
- public static IOFileFilter makeSVNAware(IOFileFilter filter) {
- if (svnFilter == null) {
- svnFilter = notFileFilter(
- andFileFilter(directoryFileFilter(), nameFileFilter(".svn")));
- }
- if (filter == null) {
- return svnFilter;
- } else {
- return andFileFilter(filter, svnFilter);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Decorates a filter so that it only applies to directories and not to files.
- *
- * @param filter the filter to decorate, null means an unrestricted filter
- * @return the decorated filter, never null
- * @since Commons IO 1.3
- */
- public static IOFileFilter makeDirectoryOnly(IOFileFilter filter) {
- if (filter == null) {
- return DirectoryFileFilter.DIRECTORY;
- }
- return new AndFileFilter(DirectoryFileFilter.DIRECTORY, filter);
- }
-
- /**
- * Decorates a filter so that it only applies to files and not to directories.
- *
- * @param filter the filter to decorate, null means an unrestricted filter
- * @return the decorated filter, never null
- * @since Commons IO 1.3
- */
- public static IOFileFilter makeFileOnly(IOFileFilter filter) {
- if (filter == null) {
- return FileFileFilter.FILE;
- }
- return new AndFileFilter(FileFileFilter.FILE, filter);
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/HiddenFileFilter.java b/src/org/apache/commons/io/filefilter/HiddenFileFilter.java
deleted file mode 100644
index 244153d5e..000000000
--- a/src/org/apache/commons/io/filefilter/HiddenFileFilter.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * This filter accepts File
s that are hidden.
- *
- * Example, showing how to print out a list of the
- * current directory's hidden files:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( HiddenFileFilter.HIDDEN );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- *
- * Example, showing how to print out a list of the
- * current directory's visible (i.e. not hidden) files:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( HiddenFileFilter.VISIBLE );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @since Commons IO 1.3
- * @version $Revision: 587916 $
- */
-public class HiddenFileFilter extends AbstractFileFilter implements Serializable {
-
- /** Singleton instance of hidden filter */
- public static final IOFileFilter HIDDEN = new HiddenFileFilter();
-
- /** Singleton instance of visible filter */
- public static final IOFileFilter VISIBLE = new NotFileFilter(HIDDEN);
-
- /**
- * Restrictive consructor.
- */
- protected HiddenFileFilter() {
- }
-
- /**
- * Checks to see if the file is hidden.
- *
- * @param file the File to check
- * @return true
if the file is
- * hidden, otherwise false
.
- */
- public boolean accept(File file) {
- return file.isHidden();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/IOFileFilter.java b/src/org/apache/commons/io/filefilter/IOFileFilter.java
deleted file mode 100644
index 5ebd82751..000000000
--- a/src/org/apache/commons/io/filefilter/IOFileFilter.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FilenameFilter;
-
-/**
- * An interface which brings the FileFilter and FilenameFilter
- * interfaces together.
- *
- * @since Commons IO 1.0
- * @version $Revision: 471628 $ $Date: 2006-11-06 04:06:45 +0000 (Mon, 06 Nov 2006) $
- *
- * @author Stephen Colebourne
- */
-public interface IOFileFilter extends FileFilter, FilenameFilter {
-
- /**
- * Checks to see if the File should be accepted by this filter.
- *
- * Defined in {@link java.io.FileFilter}.
- *
- * @param file the File to check
- * @return true if this file matches the test
- */
- public boolean accept(File file);
-
- /**
- * Checks to see if the File should be accepted by this filter.
- *
- * Defined in {@link java.io.FilenameFilter}.
- *
- * @param dir the directory File to check
- * @param name the filename within the directory to check
- * @return true if this file matches the test
- */
- public boolean accept(File dir, String name);
-
-}
diff --git a/src/org/apache/commons/io/filefilter/NameFileFilter.java b/src/org/apache/commons/io/filefilter/NameFileFilter.java
deleted file mode 100644
index fa1c80f73..000000000
--- a/src/org/apache/commons/io/filefilter/NameFileFilter.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.commons.io.IOCase;
-
-/**
- * Filters filenames for a certain name.
- *
- * For example, to print all files and directories in the
- * current directory whose name is Test
:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( new NameFileFilter("Test") );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @since Commons IO 1.0
- * @version $Revision: 606381 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $
- *
- * @author Stephen Colebourne
- * @author Federico Barbieri
- * @author Serge Knystautas
- * @author Peter Donald
- */
-public class NameFileFilter extends AbstractFileFilter implements Serializable {
-
- /** The filenames to search for */
- private final String[] names;
- /** Whether the comparison is case sensitive. */
- private final IOCase caseSensitivity;
-
- /**
- * Constructs a new case-sensitive name file filter for a single name.
- *
- * @param name the name to allow, must not be null
- * @throws IllegalArgumentException if the name is null
- */
- public NameFileFilter(String name) {
- this(name, null);
- }
-
- /**
- * Construct a new name file filter specifying case-sensitivity.
- *
- * @param name the name to allow, must not be null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the name is null
- */
- public NameFileFilter(String name, IOCase caseSensitivity) {
- if (name == null) {
- throw new IllegalArgumentException("The wildcard must not be null");
- }
- this.names = new String[] {name};
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Constructs a new case-sensitive name file filter for an array of names.
- *
- * The array is not cloned, so could be changed after constructing the
- * instance. This would be inadvisable however.
- *
- * @param names the names to allow, must not be null
- * @throws IllegalArgumentException if the names array is null
- */
- public NameFileFilter(String[] names) {
- this(names, null);
- }
-
- /**
- * Constructs a new name file filter for an array of names specifying case-sensitivity.
- *
- * The array is not cloned, so could be changed after constructing the
- * instance. This would be inadvisable however.
- *
- * @param names the names to allow, must not be null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the names array is null
- */
- public NameFileFilter(String[] names, IOCase caseSensitivity) {
- if (names == null) {
- throw new IllegalArgumentException("The array of names must not be null");
- }
- this.names = names;
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Constructs a new case-sensitive name file filter for a list of names.
- *
- * @param names the names to allow, must not be null
- * @throws IllegalArgumentException if the name list is null
- * @throws ClassCastException if the list does not contain Strings
- */
- public NameFileFilter(List names) {
- this(names, null);
- }
-
- /**
- * Constructs a new name file filter for a list of names specifying case-sensitivity.
- *
- * @param names the names to allow, must not be null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the name list is null
- * @throws ClassCastException if the list does not contain Strings
- */
- public NameFileFilter(List names, IOCase caseSensitivity) {
- if (names == null) {
- throw new IllegalArgumentException("The list of names must not be null");
- }
- this.names = (String[]) names.toArray(new String[names.size()]);
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks to see if the filename matches.
- *
- * @param file the File to check
- * @return true if the filename matches
- */
- public boolean accept(File file) {
- String name = file.getName();
- for (int i = 0; i < this.names.length; i++) {
- if (caseSensitivity.checkEquals(name, names[i])) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Checks to see if the filename matches.
- *
- * @param file the File directory
- * @param name the filename
- * @return true if the filename matches
- */
- public boolean accept(File file, String name) {
- for (int i = 0; i < names.length; i++) {
- if (caseSensitivity.checkEquals(name, names[i])) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append(super.toString());
- buffer.append("(");
- if (names != null) {
- for (int i = 0; i < names.length; i++) {
- if (i > 0) {
- buffer.append(",");
- }
- buffer.append(names[i]);
- }
- }
- buffer.append(")");
- return buffer.toString();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/NotFileFilter.java b/src/org/apache/commons/io/filefilter/NotFileFilter.java
deleted file mode 100644
index 710c8ecf3..000000000
--- a/src/org/apache/commons/io/filefilter/NotFileFilter.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * This filter produces a logical NOT of the filters specified.
- *
- * @since Commons IO 1.0
- * @version $Revision: 591058 $ $Date: 2007-11-01 15:47:05 +0000 (Thu, 01 Nov 2007) $
- *
- * @author Stephen Colebourne
- */
-public class NotFileFilter extends AbstractFileFilter implements Serializable {
-
- /** The filter */
- private final IOFileFilter filter;
-
- /**
- * Constructs a new file filter that NOTs the result of another filters.
- *
- * @param filter the filter, must not be null
- * @throws IllegalArgumentException if the filter is null
- */
- public NotFileFilter(IOFileFilter filter) {
- if (filter == null) {
- throw new IllegalArgumentException("The filter must not be null");
- }
- this.filter = filter;
- }
-
- /**
- * Checks to see if both filters are true.
- *
- * @param file the File to check
- * @return true if the filter returns false
- */
- public boolean accept(File file) {
- return ! filter.accept(file);
- }
-
- /**
- * Checks to see if both filters are true.
- *
- * @param file the File directory
- * @param name the filename
- * @return true if the filter returns false
- */
- public boolean accept(File file, String name) {
- return ! filter.accept(file, name);
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- return super.toString() + "(" + filter.toString() + ")";
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/OrFileFilter.java b/src/org/apache/commons/io/filefilter/OrFileFilter.java
deleted file mode 100644
index 59cc0f2b0..000000000
--- a/src/org/apache/commons/io/filefilter/OrFileFilter.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * A {@link java.io.FileFilter} providing conditional OR logic across a list of
- * file filters. This filter returns true
if any filters in the
- * list return true
. Otherwise, it returns false
.
- * Checking of the file filter list stops when the first filter returns
- * true
.
- *
- * @since Commons IO 1.0
- * @version $Revision: 606381 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $
- *
- * @author Steven Caswell
- */
-public class OrFileFilter
- extends AbstractFileFilter
- implements ConditionalFileFilter, Serializable {
-
- /** The list of file filters. */
- private List fileFilters;
-
- /**
- * Constructs a new instance of OrFileFilter
.
- *
- * @since Commons IO 1.1
- */
- public OrFileFilter() {
- this.fileFilters = new ArrayList();
- }
-
- /**
- * Constructs a new instance of OrFileFilter
- * with the specified filters.
- *
- * @param fileFilters the file filters for this filter, copied, null ignored
- * @since Commons IO 1.1
- */
- public OrFileFilter(final List fileFilters) {
- if (fileFilters == null) {
- this.fileFilters = new ArrayList();
- } else {
- this.fileFilters = new ArrayList(fileFilters);
- }
- }
-
- /**
- * Constructs a new file filter that ORs the result of two other filters.
- *
- * @param filter1 the first filter, must not be null
- * @param filter2 the second filter, must not be null
- * @throws IllegalArgumentException if either filter is null
- */
- public OrFileFilter(IOFileFilter filter1, IOFileFilter filter2) {
- if (filter1 == null || filter2 == null) {
- throw new IllegalArgumentException("The filters must not be null");
- }
- this.fileFilters = new ArrayList();
- addFileFilter(filter1);
- addFileFilter(filter2);
- }
-
- /**
- * {@inheritDoc}
- */
- public void addFileFilter(final IOFileFilter ioFileFilter) {
- this.fileFilters.add(ioFileFilter);
- }
-
- /**
- * {@inheritDoc}
- */
- public List getFileFilters() {
- return Collections.unmodifiableList(this.fileFilters);
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean removeFileFilter(IOFileFilter ioFileFilter) {
- return this.fileFilters.remove(ioFileFilter);
- }
-
- /**
- * {@inheritDoc}
- */
- public void setFileFilters(final List fileFilters) {
- this.fileFilters = fileFilters;
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean accept(final File file) {
- for (Iterator iter = this.fileFilters.iterator(); iter.hasNext();) {
- IOFileFilter fileFilter = (IOFileFilter) iter.next();
- if (fileFilter.accept(file)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean accept(final File file, final String name) {
- for (Iterator iter = this.fileFilters.iterator(); iter.hasNext();) {
- IOFileFilter fileFilter = (IOFileFilter) iter.next();
- if (fileFilter.accept(file, name)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append(super.toString());
- buffer.append("(");
- if (fileFilters != null) {
- for (int i = 0; i < fileFilters.size(); i++) {
- if (i > 0) {
- buffer.append(",");
- }
- Object filter = fileFilters.get(i);
- buffer.append(filter == null ? "null" : filter.toString());
- }
- }
- buffer.append(")");
- return buffer.toString();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/PrefixFileFilter.java b/src/org/apache/commons/io/filefilter/PrefixFileFilter.java
deleted file mode 100644
index 0b6fcb961..000000000
--- a/src/org/apache/commons/io/filefilter/PrefixFileFilter.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.commons.io.IOCase;
-
-/**
- * Filters filenames for a certain prefix.
- *
- * For example, to print all files and directories in the
- * current directory whose name starts with Test
:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( new PrefixFileFilter("Test") );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @since Commons IO 1.0
- * @version $Revision: 606381 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $
- *
- * @author Stephen Colebourne
- * @author Federico Barbieri
- * @author Serge Knystautas
- * @author Peter Donald
- */
-public class PrefixFileFilter extends AbstractFileFilter implements Serializable {
-
- /** The filename prefixes to search for */
- private final String[] prefixes;
-
- /** Whether the comparison is case sensitive. */
- private final IOCase caseSensitivity;
-
- /**
- * Constructs a new Prefix file filter for a single prefix.
- *
- * @param prefix the prefix to allow, must not be null
- * @throws IllegalArgumentException if the prefix is null
- */
- public PrefixFileFilter(String prefix) {
- this(prefix, IOCase.SENSITIVE);
- }
-
- /**
- * Constructs a new Prefix file filter for a single prefix
- * specifying case-sensitivity.
- *
- * @param prefix the prefix to allow, must not be null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the prefix is null
- * @since Commons IO 1.4
- */
- public PrefixFileFilter(String prefix, IOCase caseSensitivity) {
- if (prefix == null) {
- throw new IllegalArgumentException("The prefix must not be null");
- }
- this.prefixes = new String[] {prefix};
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Constructs a new Prefix file filter for any of an array of prefixes.
- *
- * The array is not cloned, so could be changed after constructing the
- * instance. This would be inadvisable however.
- *
- * @param prefixes the prefixes to allow, must not be null
- * @throws IllegalArgumentException if the prefix array is null
- */
- public PrefixFileFilter(String[] prefixes) {
- this(prefixes, IOCase.SENSITIVE);
- }
-
- /**
- * Constructs a new Prefix file filter for any of an array of prefixes
- * specifying case-sensitivity.
- *
- * The array is not cloned, so could be changed after constructing the
- * instance. This would be inadvisable however.
- *
- * @param prefixes the prefixes to allow, must not be null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the prefix is null
- * @since Commons IO 1.4
- */
- public PrefixFileFilter(String[] prefixes, IOCase caseSensitivity) {
- if (prefixes == null) {
- throw new IllegalArgumentException("The array of prefixes must not be null");
- }
- this.prefixes = prefixes;
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Constructs a new Prefix file filter for a list of prefixes.
- *
- * @param prefixes the prefixes to allow, must not be null
- * @throws IllegalArgumentException if the prefix list is null
- * @throws ClassCastException if the list does not contain Strings
- */
- public PrefixFileFilter(List prefixes) {
- this(prefixes, IOCase.SENSITIVE);
- }
-
- /**
- * Constructs a new Prefix file filter for a list of prefixes
- * specifying case-sensitivity.
- *
- * @param prefixes the prefixes to allow, must not be null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the prefix list is null
- * @throws ClassCastException if the list does not contain Strings
- * @since Commons IO 1.4
- */
- public PrefixFileFilter(List prefixes, IOCase caseSensitivity) {
- if (prefixes == null) {
- throw new IllegalArgumentException("The list of prefixes must not be null");
- }
- this.prefixes = (String[]) prefixes.toArray(new String[prefixes.size()]);
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Checks to see if the filename starts with the prefix.
- *
- * @param file the File to check
- * @return true if the filename starts with one of our prefixes
- */
- public boolean accept(File file) {
- String name = file.getName();
- for (int i = 0; i < this.prefixes.length; i++) {
- if (caseSensitivity.checkStartsWith(name, prefixes[i])) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Checks to see if the filename starts with the prefix.
- *
- * @param file the File directory
- * @param name the filename
- * @return true if the filename starts with one of our prefixes
- */
- public boolean accept(File file, String name) {
- for (int i = 0; i < prefixes.length; i++) {
- if (caseSensitivity.checkStartsWith(name, prefixes[i])) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append(super.toString());
- buffer.append("(");
- if (prefixes != null) {
- for (int i = 0; i < prefixes.length; i++) {
- if (i > 0) {
- buffer.append(",");
- }
- buffer.append(prefixes[i]);
- }
- }
- buffer.append(")");
- return buffer.toString();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/RegexFileFilter.java b/src/org/apache/commons/io/filefilter/RegexFileFilter.java
deleted file mode 100644
index b49a1bd3b..000000000
--- a/src/org/apache/commons/io/filefilter/RegexFileFilter.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.regex.Pattern;
-
-import org.apache.commons.io.IOCase;
-
-/**
- * Filters files using supplied regular expression(s).
- *
- * See java.util.regex.Pattern for regex matching rules
- *
- *
- *
- * e.g.
- *
- * File dir = new File(".");
- * FileFilter fileFilter = new RegexFileFilter("^.*[tT]est(-\\d+)?\\.java$");
- * File[] files = dir.listFiles(fileFilter);
- * for (int i = 0; i < files.length; i++) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @author Oliver Siegmar
- * @version $Revision: 606381 $
- * @since Commons IO 1.4
- */
-public class RegexFileFilter extends AbstractFileFilter implements Serializable {
-
- /** The regular expression pattern that will be used to match filenames */
- private final Pattern pattern;
-
- /**
- * Construct a new regular expression filter.
- *
- * @param pattern regular string expression to match
- * @throws IllegalArgumentException if the pattern is null
- */
- public RegexFileFilter(String pattern) {
- if (pattern == null) {
- throw new IllegalArgumentException("Pattern is missing");
- }
-
- this.pattern = Pattern.compile(pattern);
- }
-
- /**
- * Construct a new regular expression filter with the specified flags case sensitivity.
- *
- * @param pattern regular string expression to match
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the pattern is null
- */
- public RegexFileFilter(String pattern, IOCase caseSensitivity) {
- if (pattern == null) {
- throw new IllegalArgumentException("Pattern is missing");
- }
- int flags = 0;
- if (caseSensitivity != null && !caseSensitivity.isCaseSensitive()) {
- flags = Pattern.CASE_INSENSITIVE;
- }
- this.pattern = Pattern.compile(pattern, flags);
- }
-
- /**
- * Construct a new regular expression filter with the specified flags.
- *
- * @param pattern regular string expression to match
- * @param flags pattern flags - e.g. {@link Pattern#CASE_INSENSITIVE}
- * @throws IllegalArgumentException if the pattern is null
- */
- public RegexFileFilter(String pattern, int flags) {
- if (pattern == null) {
- throw new IllegalArgumentException("Pattern is missing");
- }
- this.pattern = Pattern.compile(pattern, flags);
- }
-
- /**
- * Construct a new regular expression filter for a compiled regular expression
- *
- * @param pattern regular expression to match
- * @throws IllegalArgumentException if the pattern is null
- */
- public RegexFileFilter(Pattern pattern) {
- if (pattern == null) {
- throw new IllegalArgumentException("Pattern is missing");
- }
-
- this.pattern = pattern;
- }
-
- /**
- * Checks to see if the filename matches one of the regular expressions.
- *
- * @param dir the file directory
- * @param name the filename
- * @return true if the filename matches one of the regular expressions
- */
- public boolean accept(File dir, String name) {
- return (pattern.matcher(name).matches());
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/SizeFileFilter.java b/src/org/apache/commons/io/filefilter/SizeFileFilter.java
deleted file mode 100644
index 614e4243f..000000000
--- a/src/org/apache/commons/io/filefilter/SizeFileFilter.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * Filters files based on size, can filter either smaller files or
- * files equal to or larger than a given threshold.
- *
- * For example, to print all files and directories in the
- * current directory whose size is greater than 1 MB:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( new SizeFileFilter(1024 * 1024) );
- * for ( int i = 0; i < files.length; i++ ) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @author Rahul Akolkar
- * @version $Id: SizeFileFilter.java 591058 2007-11-01 15:47:05Z niallp $
- * @since Commons IO 1.2
- */
-public class SizeFileFilter extends AbstractFileFilter implements Serializable {
-
- /** The size threshold. */
- private final long size;
- /** Whether the files accepted will be larger or smaller. */
- private final boolean acceptLarger;
-
- /**
- * Constructs a new size file filter for files equal to or
- * larger than a certain size.
- *
- * @param size the threshold size of the files
- * @throws IllegalArgumentException if the size is negative
- */
- public SizeFileFilter(long size) {
- this(size, true);
- }
-
- /**
- * Constructs a new size file filter for files based on a certain size
- * threshold.
- *
- * @param size the threshold size of the files
- * @param acceptLarger if true, files equal to or larger are accepted,
- * otherwise smaller ones (but not equal to)
- * @throws IllegalArgumentException if the size is negative
- */
- public SizeFileFilter(long size, boolean acceptLarger) {
- if (size < 0) {
- throw new IllegalArgumentException("The size must be non-negative");
- }
- this.size = size;
- this.acceptLarger = acceptLarger;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks to see if the size of the file is favorable.
- *
- * If size equals threshold and smaller files are required,
- * file IS NOT selected.
- * If size equals threshold and larger files are required,
- * file IS selected.
- *
- * @param file the File to check
- * @return true if the filename matches
- */
- public boolean accept(File file) {
- boolean smaller = file.length() < size;
- return acceptLarger ? !smaller : smaller;
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- String condition = acceptLarger ? ">=" : "<";
- return super.toString() + "(" + condition + size + ")";
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/SuffixFileFilter.java b/src/org/apache/commons/io/filefilter/SuffixFileFilter.java
deleted file mode 100644
index bee34402c..000000000
--- a/src/org/apache/commons/io/filefilter/SuffixFileFilter.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.commons.io.IOCase;
-
-/**
- * Filters files based on the suffix (what the filename ends with).
- * This is used in retrieving all the files of a particular type.
- *
- * For example, to retrieve and print all *.java
files
- * in the current directory:
- *
- *
- * File dir = new File(".");
- * String[] files = dir.list( new SuffixFileFilter(".java") );
- * for (int i = 0; i < files.length; i++) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @since Commons IO 1.0
- * @version $Revision: 606381 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $
- *
- * @author Stephen Colebourne
- * @author Federico Barbieri
- * @author Serge Knystautas
- * @author Peter Donald
- */
-public class SuffixFileFilter extends AbstractFileFilter implements Serializable {
-
- /** The filename suffixes to search for */
- private final String[] suffixes;
-
- /** Whether the comparison is case sensitive. */
- private final IOCase caseSensitivity;
-
- /**
- * Constructs a new Suffix file filter for a single extension.
- *
- * @param suffix the suffix to allow, must not be null
- * @throws IllegalArgumentException if the suffix is null
- */
- public SuffixFileFilter(String suffix) {
- this(suffix, IOCase.SENSITIVE);
- }
-
- /**
- * Constructs a new Suffix file filter for a single extension
- * specifying case-sensitivity.
- *
- * @param suffix the suffix to allow, must not be null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the suffix is null
- * @since Commons IO 1.4
- */
- public SuffixFileFilter(String suffix, IOCase caseSensitivity) {
- if (suffix == null) {
- throw new IllegalArgumentException("The suffix must not be null");
- }
- this.suffixes = new String[] {suffix};
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Constructs a new Suffix file filter for an array of suffixs.
- *
- * The array is not cloned, so could be changed after constructing the
- * instance. This would be inadvisable however.
- *
- * @param suffixes the suffixes to allow, must not be null
- * @throws IllegalArgumentException if the suffix array is null
- */
- public SuffixFileFilter(String[] suffixes) {
- this(suffixes, IOCase.SENSITIVE);
- }
-
- /**
- * Constructs a new Suffix file filter for an array of suffixs
- * specifying case-sensitivity.
- *
- * The array is not cloned, so could be changed after constructing the
- * instance. This would be inadvisable however.
- *
- * @param suffixes the suffixes to allow, must not be null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the suffix array is null
- * @since Commons IO 1.4
- */
- public SuffixFileFilter(String[] suffixes, IOCase caseSensitivity) {
- if (suffixes == null) {
- throw new IllegalArgumentException("The array of suffixes must not be null");
- }
- this.suffixes = suffixes;
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Constructs a new Suffix file filter for a list of suffixes.
- *
- * @param suffixes the suffixes to allow, must not be null
- * @throws IllegalArgumentException if the suffix list is null
- * @throws ClassCastException if the list does not contain Strings
- */
- public SuffixFileFilter(List suffixes) {
- this(suffixes, IOCase.SENSITIVE);
- }
-
- /**
- * Constructs a new Suffix file filter for a list of suffixes
- * specifying case-sensitivity.
- *
- * @param suffixes the suffixes to allow, must not be null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the suffix list is null
- * @throws ClassCastException if the list does not contain Strings
- * @since Commons IO 1.4
- */
- public SuffixFileFilter(List suffixes, IOCase caseSensitivity) {
- if (suffixes == null) {
- throw new IllegalArgumentException("The list of suffixes must not be null");
- }
- this.suffixes = (String[]) suffixes.toArray(new String[suffixes.size()]);
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Checks to see if the filename ends with the suffix.
- *
- * @param file the File to check
- * @return true if the filename ends with one of our suffixes
- */
- public boolean accept(File file) {
- String name = file.getName();
- for (int i = 0; i < this.suffixes.length; i++) {
- if (caseSensitivity.checkEndsWith(name, suffixes[i])) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Checks to see if the filename ends with the suffix.
- *
- * @param file the File directory
- * @param name the filename
- * @return true if the filename ends with one of our suffixes
- */
- public boolean accept(File file, String name) {
- for (int i = 0; i < this.suffixes.length; i++) {
- if (caseSensitivity.checkEndsWith(name, suffixes[i])) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append(super.toString());
- buffer.append("(");
- if (suffixes != null) {
- for (int i = 0; i < suffixes.length; i++) {
- if (i > 0) {
- buffer.append(",");
- }
- buffer.append(suffixes[i]);
- }
- }
- buffer.append(")");
- return buffer.toString();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/TrueFileFilter.java b/src/org/apache/commons/io/filefilter/TrueFileFilter.java
deleted file mode 100644
index be1b13a7e..000000000
--- a/src/org/apache/commons/io/filefilter/TrueFileFilter.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-
-/**
- * A file filter that always returns true.
- *
- * @since Commons IO 1.0
- * @version $Revision: 587978 $ $Date: 2007-10-24 20:36:51 +0100 (Wed, 24 Oct 2007) $
- *
- * @author Stephen Colebourne
- */
-public class TrueFileFilter implements IOFileFilter, Serializable {
-
- /**
- * Singleton instance of true filter.
- * @since Commons IO 1.3
- */
- public static final IOFileFilter TRUE = new TrueFileFilter();
- /**
- * Singleton instance of true filter.
- * Please use the identical TrueFileFilter.TRUE constant.
- * The new name is more JDK 1.5 friendly as it doesn't clash with other
- * values when using static imports.
- */
- public static final IOFileFilter INSTANCE = TRUE;
-
- /**
- * Restrictive consructor.
- */
- protected TrueFileFilter() {
- }
-
- /**
- * Returns true.
- *
- * @param file the file to check
- * @return true
- */
- public boolean accept(File file) {
- return true;
- }
-
- /**
- * Returns true.
- *
- * @param dir the directory to check
- * @param name the filename
- * @return true
- */
- public boolean accept(File dir, String name) {
- return true;
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/WildcardFileFilter.java b/src/org/apache/commons/io/filefilter/WildcardFileFilter.java
deleted file mode 100644
index 791fe985b..000000000
--- a/src/org/apache/commons/io/filefilter/WildcardFileFilter.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.IOCase;
-
-/**
- * Filters files using the supplied wildcards.
- *
- * This filter selects files and directories based on one or more wildcards.
- * Testing is case-sensitive by default, but this can be configured.
- *
- * The wildcard matcher uses the characters '?' and '*' to represent a
- * single or multiple wildcard characters.
- * This is the same as often found on Dos/Unix command lines.
- * The extension check is case-sensitive by .
- * See {@link FilenameUtils#wildcardMatchOnSystem} for more information.
- *
- * For example:
- *
- * File dir = new File(".");
- * FileFilter fileFilter = new WildcardFileFilter("*test*.java~*~");
- * File[] files = dir.listFiles(fileFilter);
- * for (int i = 0; i < files.length; i++) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @author Jason Anderson
- * @version $Revision: 155419 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $
- * @since Commons IO 1.3
- */
-public class WildcardFileFilter extends AbstractFileFilter implements Serializable {
-
- /** The wildcards that will be used to match filenames. */
- private final String[] wildcards;
- /** Whether the comparison is case sensitive. */
- private final IOCase caseSensitivity;
-
- /**
- * Construct a new case-sensitive wildcard filter for a single wildcard.
- *
- * @param wildcard the wildcard to match
- * @throws IllegalArgumentException if the pattern is null
- */
- public WildcardFileFilter(String wildcard) {
- this(wildcard, null);
- }
-
- /**
- * Construct a new wildcard filter for a single wildcard specifying case-sensitivity.
- *
- * @param wildcard the wildcard to match, not null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the pattern is null
- */
- public WildcardFileFilter(String wildcard, IOCase caseSensitivity) {
- if (wildcard == null) {
- throw new IllegalArgumentException("The wildcard must not be null");
- }
- this.wildcards = new String[] { wildcard };
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Construct a new case-sensitive wildcard filter for an array of wildcards.
- *
- * The array is not cloned, so could be changed after constructing the
- * instance. This would be inadvisable however.
- *
- * @param wildcards the array of wildcards to match
- * @throws IllegalArgumentException if the pattern array is null
- */
- public WildcardFileFilter(String[] wildcards) {
- this(wildcards, null);
- }
-
- /**
- * Construct a new wildcard filter for an array of wildcards specifying case-sensitivity.
- *
- * The array is not cloned, so could be changed after constructing the
- * instance. This would be inadvisable however.
- *
- * @param wildcards the array of wildcards to match, not null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the pattern array is null
- */
- public WildcardFileFilter(String[] wildcards, IOCase caseSensitivity) {
- if (wildcards == null) {
- throw new IllegalArgumentException("The wildcard array must not be null");
- }
- this.wildcards = wildcards;
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- /**
- * Construct a new case-sensitive wildcard filter for a list of wildcards.
- *
- * @param wildcards the list of wildcards to match, not null
- * @throws IllegalArgumentException if the pattern list is null
- * @throws ClassCastException if the list does not contain Strings
- */
- public WildcardFileFilter(List wildcards) {
- this(wildcards, null);
- }
-
- /**
- * Construct a new wildcard filter for a list of wildcards specifying case-sensitivity.
- *
- * @param wildcards the list of wildcards to match, not null
- * @param caseSensitivity how to handle case sensitivity, null means case-sensitive
- * @throws IllegalArgumentException if the pattern list is null
- * @throws ClassCastException if the list does not contain Strings
- */
- public WildcardFileFilter(List wildcards, IOCase caseSensitivity) {
- if (wildcards == null) {
- throw new IllegalArgumentException("The wildcard list must not be null");
- }
- this.wildcards = (String[]) wildcards.toArray(new String[wildcards.size()]);
- this.caseSensitivity = (caseSensitivity == null ? IOCase.SENSITIVE : caseSensitivity);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks to see if the filename matches one of the wildcards.
- *
- * @param dir the file directory
- * @param name the filename
- * @return true if the filename matches one of the wildcards
- */
- public boolean accept(File dir, String name) {
- for (int i = 0; i < wildcards.length; i++) {
- if (FilenameUtils.wildcardMatch(name, wildcards[i], caseSensitivity)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Checks to see if the filename matches one of the wildcards.
- *
- * @param file the file to check
- * @return true if the filename matches one of the wildcards
- */
- public boolean accept(File file) {
- String name = file.getName();
- for (int i = 0; i < wildcards.length; i++) {
- if (FilenameUtils.wildcardMatch(name, wildcards[i], caseSensitivity)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Provide a String representaion of this file filter.
- *
- * @return a String representaion
- */
- public String toString() {
- StringBuffer buffer = new StringBuffer();
- buffer.append(super.toString());
- buffer.append("(");
- if (wildcards != null) {
- for (int i = 0; i < wildcards.length; i++) {
- if (i > 0) {
- buffer.append(",");
- }
- buffer.append(wildcards[i]);
- }
- }
- buffer.append(")");
- return buffer.toString();
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/WildcardFilter.java b/src/org/apache/commons/io/filefilter/WildcardFilter.java
deleted file mode 100644
index 2a6e0dde0..000000000
--- a/src/org/apache/commons/io/filefilter/WildcardFilter.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.filefilter;
-
-import java.io.File;
-import java.io.Serializable;
-import java.util.List;
-
-import org.apache.commons.io.FilenameUtils;
-
-/**
- * Filters files using the supplied wildcards.
- *
- * This filter selects files, but not directories, based on one or more wildcards
- * and using case-sensitive comparison.
- *
- * The wildcard matcher uses the characters '?' and '*' to represent a
- * single or multiple wildcard characters.
- * This is the same as often found on Dos/Unix command lines.
- * The extension check is case-sensitive.
- * See {@link FilenameUtils#wildcardMatch} for more information.
- *
- * For example:
- *
- * File dir = new File(".");
- * FileFilter fileFilter = new WildcardFilter("*test*.java~*~");
- * File[] files = dir.listFiles(fileFilter);
- * for (int i = 0; i < files.length; i++) {
- * System.out.println(files[i]);
- * }
- *
- *
- * @author Jason Anderson
- * @version $Revision: 606381 $ $Date: 2007-12-22 02:03:16 +0000 (Sat, 22 Dec 2007) $
- * @since Commons IO 1.1
- * @deprecated Use WilcardFileFilter. Deprecated as this class performs directory
- * filtering which it shouldn't do, but that can't be removed due to compatability.
- */
-public class WildcardFilter extends AbstractFileFilter implements Serializable {
-
- /** The wildcards that will be used to match filenames. */
- private final String[] wildcards;
-
- /**
- * Construct a new case-sensitive wildcard filter for a single wildcard.
- *
- * @param wildcard the wildcard to match
- * @throws IllegalArgumentException if the pattern is null
- */
- public WildcardFilter(String wildcard) {
- if (wildcard == null) {
- throw new IllegalArgumentException("The wildcard must not be null");
- }
- this.wildcards = new String[] { wildcard };
- }
-
- /**
- * Construct a new case-sensitive wildcard filter for an array of wildcards.
- *
- * @param wildcards the array of wildcards to match
- * @throws IllegalArgumentException if the pattern array is null
- */
- public WildcardFilter(String[] wildcards) {
- if (wildcards == null) {
- throw new IllegalArgumentException("The wildcard array must not be null");
- }
- this.wildcards = wildcards;
- }
-
- /**
- * Construct a new case-sensitive wildcard filter for a list of wildcards.
- *
- * @param wildcards the list of wildcards to match
- * @throws IllegalArgumentException if the pattern list is null
- * @throws ClassCastException if the list does not contain Strings
- */
- public WildcardFilter(List wildcards) {
- if (wildcards == null) {
- throw new IllegalArgumentException("The wildcard list must not be null");
- }
- this.wildcards = (String[]) wildcards.toArray(new String[wildcards.size()]);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks to see if the filename matches one of the wildcards.
- *
- * @param dir the file directory
- * @param name the filename
- * @return true if the filename matches one of the wildcards
- */
- public boolean accept(File dir, String name) {
- if (dir != null && new File(dir, name).isDirectory()) {
- return false;
- }
-
- for (int i = 0; i < wildcards.length; i++) {
- if (FilenameUtils.wildcardMatch(name, wildcards[i])) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Checks to see if the filename matches one of the wildcards.
- *
- * @param file the file to check
- * @return true if the filename matches one of the wildcards
- */
- public boolean accept(File file) {
- if (file.isDirectory()) {
- return false;
- }
-
- for (int i = 0; i < wildcards.length; i++) {
- if (FilenameUtils.wildcardMatch(file.getName(), wildcards[i])) {
- return true;
- }
- }
-
- return false;
- }
-
-}
diff --git a/src/org/apache/commons/io/filefilter/package.html b/src/org/apache/commons/io/filefilter/package.html
deleted file mode 100644
index 7a45f251d..000000000
--- a/src/org/apache/commons/io/filefilter/package.html
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
-This package defines an interface (IOFileFilter) that combines both
-{@link java.io.FileFilter} and {@link java.io.FilenameFilter}. Besides
-that the package offers a series of ready-to-use implementations of the
-IOFileFilter interface including implementation that allow you to combine
-other such filters.
-These filter can be used to list files or in {@link java.awt.FileDialog},
-for example.
-
-There are a number of 'primitive' filters:
-
-
-
-And there are five 'boolean' filters:
-
-
-
-These boolean FilenameFilters can be nested, to allow arbitrary expressions.
-For example, here is how one could print all non-directory files in the
-current directory, starting with "A", and ending in ".java" or ".class":
-
-
- File dir = new File(".");
- String[] files = dir.list(
- new AndFileFilter(
- new AndFileFilter(
- new PrefixFileFilter("A"),
- new OrFileFilter(
- new SuffixFileFilter(".class"),
- new SuffixFileFilter(".java")
- )
- ),
- new NotFileFilter(
- new DirectoryFileFilter()
- )
- )
- );
- for ( int i=0; i<files.length; i++ ) {
- System.out.println(files[i]);
- }
-
-
-This package also contains a utility class:
-FileFilterUtils. It allows you to use all
-file filters without having to put them in the import section. Here's how the
-above example will look using FileFilterUtils:
-
- File dir = new File(".");
- String[] files = dir.list(
- FileFilterUtils.andFileFilter(
- FileFilterUtils.andFileFilter(
- FileFilterUtils.prefixFileFilter("A"),
- FileFilterUtils.orFileFilter(
- FileFilterUtils.suffixFileFilter(".class"),
- FileFilterUtils.suffixFileFilter(".java")
- )
- ),
- FileFilterUtils.notFileFilter(
- FileFilterUtils.directoryFileFilter()
- )
- )
- );
- for ( int i=0; i<files.length; i++ ) {
- System.out.println(files[i]);
- }
-
-There are a few other goodies in that class so please have a look at the
-documentation in detail.
-
-
diff --git a/src/org/apache/commons/io/input/AutoCloseInputStream.java b/src/org/apache/commons/io/input/AutoCloseInputStream.java
deleted file mode 100644
index bb62358f7..000000000
--- a/src/org/apache/commons/io/input/AutoCloseInputStream.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Proxy stream that closes and discards the underlying stream as soon as the
- * end of input has been reached or when the stream is explicitly closed.
- * Not even a reference to the underlying stream is kept after it has been
- * closed, so any allocated in-memory buffers can be freed even if the
- * client application still keeps a reference to the proxy stream.
- *
- * This class is typically used to release any resources related to an open
- * stream as soon as possible even if the client application (by not explicitly
- * closing the stream when no longer needed) or the underlying stream (by not
- * releasing resources once the last byte has been read) do not do that.
- *
- * @version $Id: AutoCloseInputStream.java 610010 2008-01-08 14:50:59Z niallp $
- * @since Commons IO 1.4
- */
-public class AutoCloseInputStream extends ProxyInputStream {
-
- /**
- * Creates an automatically closing proxy for the given input stream.
- *
- * @param in underlying input stream
- */
- public AutoCloseInputStream(InputStream in) {
- super(in);
- }
-
- /**
- * Closes the underlying input stream and replaces the reference to it
- * with a {@link ClosedInputStream} instance.
- *
- * This method is automatically called by the read methods when the end
- * of input has been reached.
- *
- * Note that it is safe to call this method any number of times. The original
- * underlying input stream is closed and discarded only once when this
- * method is first called.
- *
- * @throws IOException if the underlying input stream can not be closed
- */
- public void close() throws IOException {
- in.close();
- in = new ClosedInputStream();
- }
-
- /**
- * Reads and returns a single byte from the underlying input stream.
- * If the underlying stream returns -1, the {@link #close()} method is
- * called to automatically close and discard the stream.
- *
- * @return next byte in the stream, or -1 if no more bytes are available
- * @throws IOException if the stream could not be read or closed
- */
- public int read() throws IOException {
- int n = in.read();
- if (n == -1) {
- close();
- }
- return n;
- }
-
- /**
- * Reads and returns bytes from the underlying input stream to the given
- * buffer. If the underlying stream returns -1, the {@link #close()} method
- * i called to automatically close and discard the stream.
- *
- * @param b buffer to which bytes from the stream are written
- * @return number of bytes read, or -1 if no more bytes are available
- * @throws IOException if the stream could not be read or closed
- */
- public int read(byte[] b) throws IOException {
- int n = in.read(b);
- if (n == -1) {
- close();
- }
- return n;
- }
-
- /**
- * Reads and returns bytes from the underlying input stream to the given
- * buffer. If the underlying stream returns -1, the {@link #close()} method
- * i called to automatically close and discard the stream.
- *
- * @param b buffer to which bytes from the stream are written
- * @param off start offset within the buffer
- * @param len maximum number of bytes to read
- * @return number of bytes read, or -1 if no more bytes are available
- * @throws IOException if the stream could not be read or closed
- */
- public int read(byte[] b, int off, int len) throws IOException {
- int n = in.read(b, off, len);
- if (n == -1) {
- close();
- }
- return n;
- }
-
- /**
- * Ensures that the stream is closed before it gets garbage-collected.
- * As mentioned in {@link #close()}, this is a no-op if the stream has
- * already been closed.
- * @throws Throwable if an error occurs
- */
- protected void finalize() throws Throwable {
- close();
- super.finalize();
- }
-
-}
diff --git a/src/org/apache/commons/io/input/CharSequenceReader.java b/src/org/apache/commons/io/input/CharSequenceReader.java
deleted file mode 100644
index 6ee11d87d..000000000
--- a/src/org/apache/commons/io/input/CharSequenceReader.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.Reader;
-import java.io.Serializable;
-
-/**
- * {@link Reader} implementation that can read from String, StringBuffer,
- * StringBuilder or CharBuffer.
- *
- * Note: Supports {@link #mark(int)} and {@link #reset()}.
- *
- * @version $Revision: 610516 $ $Date: 2008-01-09 19:05:05 +0000 (Wed, 09 Jan 2008) $
- * @since Commons IO 1.4
- */
-public class CharSequenceReader extends Reader implements Serializable {
-
- private final CharSequence charSequence;
- private int idx;
- private int mark;
-
- /**
- * Construct a new instance with the specified character sequence.
- *
- * @param charSequence The character sequence, may be null
- */
- public CharSequenceReader(CharSequence charSequence) {
- this.charSequence = (charSequence != null ? charSequence : "");
- }
-
- /**
- * Close resets the file back to the start and removes any marked position.
- */
- public void close() {
- idx = 0;
- mark = 0;
- }
-
- /**
- * Mark the current position.
- *
- * @param readAheadLimit ignored
- */
- public void mark(int readAheadLimit) {
- mark = idx;
- }
-
- /**
- * Mark is supported (returns true).
- *
- * @return true
- */
- public boolean markSupported() {
- return true;
- }
-
- /**
- * Read a single character.
- *
- * @return the next character from the character sequence
- * or -1 if the end has been reached.
- */
- public int read() {
- if (idx >= charSequence.length()) {
- return -1;
- } else {
- return charSequence.charAt(idx++);
- }
- }
-
- /**
- * Read the sepcified number of characters into the array.
- *
- * @param array The array to store the characters in
- * @param offset The starting position in the array to store
- * @param length The maximum number of characters to read
- * @return The number of characters read or -1 if there are
- * no more
- */
- public int read(char[] array, int offset, int length) {
- if (idx >= charSequence.length()) {
- return -1;
- }
- if (array == null) {
- throw new NullPointerException("Character array is missing");
- }
- if (length < 0 || (offset + length) > array.length) {
- throw new IndexOutOfBoundsException("Array Size=" + array.length +
- ", offset=" + offset + ", length=" + length);
- }
- int count = 0;
- for (int i = 0; i < length; i++) {
- int c = read();
- if (c == -1) {
- return count;
- }
- array[offset + i] = (char)c;
- count++;
- }
- return count;
- }
-
- /**
- * Reset the reader to the last marked position (or the beginning if
- * mark has not been called).
- */
- public void reset() {
- idx = mark;
- }
-
- /**
- * Skip the specified number of characters.
- *
- * @param n The number of characters to skip
- * @return The actual number of characters skipped
- */
- public long skip(long n) {
- if (n < 0) {
- throw new IllegalArgumentException(
- "Number of characters to skip is less than zero: " + n);
- }
- if (idx >= charSequence.length()) {
- return -1;
- }
- int dest = (int)Math.min(charSequence.length(), (idx + n));
- int count = dest - idx;
- idx = dest;
- return count;
- }
-
- /**
- * Return a String representation of the underlying
- * character sequence.
- *
- * @return The contents of the character sequence
- */
- public String toString() {
- return charSequence.toString();
- }
-}
diff --git a/src/org/apache/commons/io/input/ClassLoaderObjectInputStream.java b/src/org/apache/commons/io/input/ClassLoaderObjectInputStream.java
deleted file mode 100644
index 13d048946..000000000
--- a/src/org/apache/commons/io/input/ClassLoaderObjectInputStream.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamClass;
-import java.io.StreamCorruptedException;
-
-/**
- * A special ObjectInputStream that loads a class based on a specified
- * ClassLoader
rather than the system default.
- *
- * This is useful in dynamic container environments.
- *
- * @author Paul Hammant
- * @version $Id: ClassLoaderObjectInputStream.java 437567 2006-08-28 06:39:07Z bayard $
- * @since Commons IO 1.1
- */
-public class ClassLoaderObjectInputStream extends ObjectInputStream {
-
- /** The class loader to use. */
- private ClassLoader classLoader;
-
- /**
- * Constructs a new ClassLoaderObjectInputStream.
- *
- * @param classLoader the ClassLoader from which classes should be loaded
- * @param inputStream the InputStream to work on
- * @throws IOException in case of an I/O error
- * @throws StreamCorruptedException if the stream is corrupted
- */
- public ClassLoaderObjectInputStream(
- ClassLoader classLoader, InputStream inputStream)
- throws IOException, StreamCorruptedException {
- super(inputStream);
- this.classLoader = classLoader;
- }
-
- /**
- * Resolve a class specified by the descriptor using the
- * specified ClassLoader or the super ClassLoader.
- *
- * @param objectStreamClass descriptor of the class
- * @return the Class object described by the ObjectStreamClass
- * @throws IOException in case of an I/O error
- * @throws ClassNotFoundException if the Class cannot be found
- */
- protected Class resolveClass(ObjectStreamClass objectStreamClass)
- throws IOException, ClassNotFoundException {
-
- Class clazz = Class.forName(objectStreamClass.getName(), false, classLoader);
-
- if (clazz != null) {
- // the classloader knows of the class
- return clazz;
- } else {
- // classloader knows not of class, let the super classloader do it
- return super.resolveClass(objectStreamClass);
- }
- }
-}
diff --git a/src/org/apache/commons/io/input/CloseShieldInputStream.java b/src/org/apache/commons/io/input/CloseShieldInputStream.java
deleted file mode 100644
index 2058beeb2..000000000
--- a/src/org/apache/commons/io/input/CloseShieldInputStream.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.InputStream;
-
-/**
- * Proxy stream that prevents the underlying input stream from being closed.
- *
- * This class is typically used in cases where an input stream needs to be
- * passed to a component that wants to explicitly close the stream even if
- * more input would still be available to other components.
- *
- * @version $Id: CloseShieldInputStream.java 587913 2007-10-24 15:47:30Z niallp $
- * @since Commons IO 1.4
- */
-public class CloseShieldInputStream extends ProxyInputStream {
-
- /**
- * Creates a proxy that shields the given input stream from being
- * closed.
- *
- * @param in underlying input stream
- */
- public CloseShieldInputStream(InputStream in) {
- super(in);
- }
-
- /**
- * Replaces the underlying input stream with a {@link ClosedInputStream}
- * sentinel. The original input stream will remain open, but this proxy
- * will appear closed.
- */
- public void close() {
- in = new ClosedInputStream();
- }
-
-}
diff --git a/src/org/apache/commons/io/input/ClosedInputStream.java b/src/org/apache/commons/io/input/ClosedInputStream.java
deleted file mode 100644
index 86c83c903..000000000
--- a/src/org/apache/commons/io/input/ClosedInputStream.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.InputStream;
-
-/**
- * Closed input stream. This stream returns -1 to all attempts to read
- * something from the stream.
- *
- * Typically uses of this class include testing for corner cases in methods
- * that accept input streams and acting as a sentinel value instead of a
- * null
input stream.
- *
- * @version $Id: ClosedInputStream.java 601751 2007-12-06 14:55:45Z niallp $
- * @since Commons IO 1.4
- */
-public class ClosedInputStream extends InputStream {
-
- /**
- * A singleton.
- */
- public static final ClosedInputStream CLOSED_INPUT_STREAM = new ClosedInputStream();
-
- /**
- * Returns -1 to indicate that the stream is closed.
- *
- * @return always -1
- */
- public int read() {
- return -1;
- }
-
-}
diff --git a/src/org/apache/commons/io/input/CountingInputStream.java b/src/org/apache/commons/io/input/CountingInputStream.java
deleted file mode 100644
index 2782276c8..000000000
--- a/src/org/apache/commons/io/input/CountingInputStream.java
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A decorating input stream that counts the number of bytes that have passed
- * through the stream so far.
- *
- * A typical use case would be during debugging, to ensure that data is being
- * read as expected.
- *
- * @author Marcelo Liberato
- * @version $Id: CountingInputStream.java 471628 2006-11-06 04:06:45Z bayard $
- */
-public class CountingInputStream extends ProxyInputStream {
-
- /** The count of bytes that have passed. */
- private long count;
-
- /**
- * Constructs a new CountingInputStream.
- *
- * @param in the InputStream to delegate to
- */
- public CountingInputStream(InputStream in) {
- super(in);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Reads a number of bytes into the byte array, keeping count of the
- * number read.
- *
- * @param b the buffer into which the data is read, not null
- * @return the total number of bytes read into the buffer, -1 if end of stream
- * @throws IOException if an I/O error occurs
- * @see java.io.InputStream#read(byte[])
- */
- public int read(byte[] b) throws IOException {
- int found = super.read(b);
- this.count += (found >= 0) ? found : 0;
- return found;
- }
-
- /**
- * Reads a number of bytes into the byte array at a specific offset,
- * keeping count of the number read.
- *
- * @param b the buffer into which the data is read, not null
- * @param off the start offset in the buffer
- * @param len the maximum number of bytes to read
- * @return the total number of bytes read into the buffer, -1 if end of stream
- * @throws IOException if an I/O error occurs
- * @see java.io.InputStream#read(byte[], int, int)
- */
- public int read(byte[] b, int off, int len) throws IOException {
- int found = super.read(b, off, len);
- this.count += (found >= 0) ? found : 0;
- return found;
- }
-
- /**
- * Reads the next byte of data adding to the count of bytes received
- * if a byte is successfully read.
- *
- * @return the byte read, -1 if end of stream
- * @throws IOException if an I/O error occurs
- * @see java.io.InputStream#read()
- */
- public int read() throws IOException {
- int found = super.read();
- this.count += (found >= 0) ? 1 : 0;
- return found;
- }
-
- /**
- * Skips the stream over the specified number of bytes, adding the skipped
- * amount to the count.
- *
- * @param length the number of bytes to skip
- * @return the actual number of bytes skipped
- * @throws IOException if an I/O error occurs
- * @see java.io.InputStream#skip(long)
- */
- public long skip(final long length) throws IOException {
- final long skip = super.skip(length);
- this.count += skip;
- return skip;
- }
-
- //-----------------------------------------------------------------------
- /**
- * The number of bytes that have passed through this stream.
- *
- * NOTE: From v1.3 this method throws an ArithmeticException if the
- * count is greater than can be expressed by an int
.
- * See {@link #getByteCount()} for a method using a long
.
- *
- * @return the number of bytes accumulated
- * @throws ArithmeticException if the byte count is too large
- */
- public synchronized int getCount() {
- long result = getByteCount();
- if (result > Integer.MAX_VALUE) {
- throw new ArithmeticException("The byte count " + result + " is too large to be converted to an int");
- }
- return (int) result;
- }
-
- /**
- * Set the byte count back to 0.
- *
- * NOTE: From v1.3 this method throws an ArithmeticException if the
- * count is greater than can be expressed by an int
.
- * See {@link #resetByteCount()} for a method using a long
.
- *
- * @return the count previous to resetting
- * @throws ArithmeticException if the byte count is too large
- */
- public synchronized int resetCount() {
- long result = resetByteCount();
- if (result > Integer.MAX_VALUE) {
- throw new ArithmeticException("The byte count " + result + " is too large to be converted to an int");
- }
- return (int) result;
- }
-
- /**
- * The number of bytes that have passed through this stream.
- *
- * NOTE: This method is an alternative for getCount()
- * and was added because that method returns an integer which will
- * result in incorrect count for files over 2GB.
- *
- * @return the number of bytes accumulated
- * @since Commons IO 1.3
- */
- public synchronized long getByteCount() {
- return this.count;
- }
-
- /**
- * Set the byte count back to 0.
- *
- * NOTE: This method is an alternative for resetCount()
- * and was added because that method returns an integer which will
- * result in incorrect count for files over 2GB.
- *
- * @return the count previous to resetting
- * @since Commons IO 1.3
- */
- public synchronized long resetByteCount() {
- long tmp = this.count;
- this.count = 0;
- return tmp;
- }
-
-}
diff --git a/src/org/apache/commons/io/input/DemuxInputStream.java b/src/org/apache/commons/io/input/DemuxInputStream.java
deleted file mode 100644
index 1ae888916..000000000
--- a/src/org/apache/commons/io/input/DemuxInputStream.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Data written to this stream is forwarded to a stream that has been associated
- * with this thread.
- *
- * @author Peter Donald
- * @version $Revision: 437567 $ $Date: 2006-08-28 07:39:07 +0100 (Mon, 28 Aug 2006) $
- */
-public class DemuxInputStream
- extends InputStream
-{
- private InheritableThreadLocal m_streams = new InheritableThreadLocal();
-
- /**
- * Bind the specified stream to the current thread.
- *
- * @param input the stream to bind
- * @return the InputStream that was previously active
- */
- public InputStream bindStream( InputStream input )
- {
- InputStream oldValue = getStream();
- m_streams.set( input );
- return oldValue;
- }
-
- /**
- * Closes stream associated with current thread.
- *
- * @throws IOException if an error occurs
- */
- public void close()
- throws IOException
- {
- InputStream input = getStream();
- if( null != input )
- {
- input.close();
- }
- }
-
- /**
- * Read byte from stream associated with current thread.
- *
- * @return the byte read from stream
- * @throws IOException if an error occurs
- */
- public int read()
- throws IOException
- {
- InputStream input = getStream();
- if( null != input )
- {
- return input.read();
- }
- else
- {
- return -1;
- }
- }
-
- /**
- * Utility method to retrieve stream bound to current thread (if any).
- *
- * @return the input stream
- */
- private InputStream getStream()
- {
- return (InputStream)m_streams.get();
- }
-}
diff --git a/src/org/apache/commons/io/input/NullInputStream.java b/src/org/apache/commons/io/input/NullInputStream.java
deleted file mode 100644
index 7cee2c6d0..000000000
--- a/src/org/apache/commons/io/input/NullInputStream.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A functional, light weight {@link InputStream} that emulates
- * a stream of a specified size.
- *
- * This implementation provides a light weight
- * object for testing with an {@link InputStream}
- * where the contents don't matter.
- *
- * One use case would be for testing the handling of
- * large {@link InputStream} as it can emulate that
- * scenario without the overhead of actually processing
- * large numbers of bytes - significantly speeding up
- * test execution times.
- *
- * This implementation returns zero from the method that
- * reads a byte and leaves the array unchanged in the read
- * methods that are passed a byte array.
- * If alternative data is required the processByte()
and
- * processBytes()
methods can be implemented to generate
- * data, for example:
- *
- *
- * public class TestInputStream extends NullInputStream {
- * public TestInputStream(int size) {
- * super(size);
- * }
- * protected int processByte() {
- * return ... // return required value here
- * }
- * protected void processBytes(byte[] bytes, int offset, int length) {
- * for (int i = offset; i < length; i++) {
- * bytes[i] = ... // set array value here
- * }
- * }
- * }
- *
- *
- * @since Commons IO 1.3
- * @version $Revision: 463529 $
- */
-public class NullInputStream extends InputStream {
-
- private long size;
- private long position;
- private long mark = -1;
- private long readlimit;
- private boolean eof;
- private boolean throwEofException;
- private boolean markSupported;
-
- /**
- * Create an {@link InputStream} that emulates a specified size
- * which supports marking and does not throw EOFException.
- *
- * @param size The size of the input stream to emulate.
- */
- public NullInputStream(long size) {
- this(size, true, false);
- }
-
- /**
- * Create an {@link InputStream} that emulates a specified
- * size with option settings.
- *
- * @param size The size of the input stream to emulate.
- * @param markSupported Whether this instance will support
- * the mark()
functionality.
- * @param throwEofException Whether this implementation
- * will throw an {@link EOFException} or return -1 when the
- * end of file is reached.
- */
- public NullInputStream(long size, boolean markSupported, boolean throwEofException) {
- this.size = size;
- this.markSupported = markSupported;
- this.throwEofException = throwEofException;
- }
-
- /**
- * Return the current position.
- *
- * @return the current position.
- */
- public long getPosition() {
- return position;
- }
-
- /**
- * Return the size this {@link InputStream} emulates.
- *
- * @return The size of the input stream to emulate.
- */
- public long getSize() {
- return size;
- }
-
- /**
- * Return the number of bytes that can be read.
- *
- * @return The number of bytes that can be read.
- */
- public int available() {
- long avail = size - position;
- if (avail <= 0) {
- return 0;
- } else if (avail > Integer.MAX_VALUE) {
- return Integer.MAX_VALUE;
- } else {
- return (int)avail;
- }
- }
-
- /**
- * Close this input stream - resets the internal state to
- * the initial values.
- *
- * @throws IOException If an error occurs.
- */
- public void close() throws IOException {
- eof = false;
- position = 0;
- mark = -1;
- }
-
- /**
- * Mark the current position.
- *
- * @param readlimit The number of bytes before this marked position
- * is invalid.
- * @throws UnsupportedOperationException if mark is not supported.
- */
- public synchronized void mark(int readlimit) {
- if (!markSupported) {
- throw new UnsupportedOperationException("Mark not supported");
- }
- mark = position;
- this.readlimit = readlimit;
- }
-
- /**
- * Indicates whether mark is supported.
- *
- * @return Whether mark is supported or not.
- */
- public boolean markSupported() {
- return markSupported;
- }
-
- /**
- * Read a byte.
- *
- * @return Either The byte value returned by processByte()
- * or -1
if the end of file has been reached and
- * throwEofException
is set to false
.
- * @throws EOFException if the end of file is reached and
- * throwEofException
is set to true
.
- * @throws IOException if trying to read past the end of file.
- */
- public int read() throws IOException {
- if (eof) {
- throw new IOException("Read after end of file");
- }
- if (position == size) {
- return doEndOfFile();
- }
- position++;
- return processByte();
- }
-
- /**
- * Read some bytes into the specified array.
- *
- * @param bytes The byte array to read into
- * @return The number of bytes read or -1
- * if the end of file has been reached and
- * throwEofException
is set to false
.
- * @throws EOFException if the end of file is reached and
- * throwEofException
is set to true
.
- * @throws IOException if trying to read past the end of file.
- */
- public int read(byte[] bytes) throws IOException {
- return read(bytes, 0, bytes.length);
- }
-
- /**
- * Read the specified number bytes into an array.
- *
- * @param bytes The byte array to read into.
- * @param offset The offset to start reading bytes into.
- * @param length The number of bytes to read.
- * @return The number of bytes read or -1
- * if the end of file has been reached and
- * throwEofException
is set to false
.
- * @throws EOFException if the end of file is reached and
- * throwEofException
is set to true
.
- * @throws IOException if trying to read past the end of file.
- */
- public int read(byte[] bytes, int offset, int length) throws IOException {
- if (eof) {
- throw new IOException("Read after end of file");
- }
- if (position == size) {
- return doEndOfFile();
- }
- position += length;
- int returnLength = length;
- if (position > size) {
- returnLength = length - (int)(position - size);
- position = size;
- }
- processBytes(bytes, offset, returnLength);
- return returnLength;
- }
-
- /**
- * Reset the stream to the point when mark was last called.
- *
- * @throws UnsupportedOperationException if mark is not supported.
- * @throws IOException If no position has been marked
- * or the read limit has been exceed since the last position was
- * marked.
- */
- public synchronized void reset() throws IOException {
- if (!markSupported) {
- throw new UnsupportedOperationException("Mark not supported");
- }
- if (mark < 0) {
- throw new IOException("No position has been marked");
- }
- if (position > (mark + readlimit)) {
- throw new IOException("Marked position [" + mark +
- "] is no longer valid - passed the read limit [" +
- readlimit + "]");
- }
- position = mark;
- eof = false;
- }
-
- /**
- * Skip a specified number of bytes.
- *
- * @param numberOfBytes The number of bytes to skip.
- * @return The number of bytes skipped or -1
- * if the end of file has been reached and
- * throwEofException
is set to false
.
- * @throws EOFException if the end of file is reached and
- * throwEofException
is set to true
.
- * @throws IOException if trying to read past the end of file.
- */
- public long skip(long numberOfBytes) throws IOException {
- if (eof) {
- throw new IOException("Skip after end of file");
- }
- if (position == size) {
- return doEndOfFile();
- }
- position += numberOfBytes;
- long returnLength = numberOfBytes;
- if (position > size) {
- returnLength = numberOfBytes - (position - size);
- position = size;
- }
- return returnLength;
- }
-
- /**
- * Return a byte value for the read()
method.
- *
- * This implementation returns zero.
- *
- * @return This implementation always returns zero.
- */
- protected int processByte() {
- // do nothing - overridable by subclass
- return 0;
- }
-
- /**
- * Process the bytes for the read(byte[], offset, length)
- * method.
- *
- * This implementation leaves the byte array unchanged.
- *
- * @param bytes The byte array
- * @param offset The offset to start at.
- * @param length The number of bytes.
- */
- protected void processBytes(byte[] bytes, int offset, int length) {
- // do nothing - overridable by subclass
- }
-
- /**
- * Handle End of File.
- *
- * @return -1
if throwEofException
is
- * set to false
- * @throws EOFException if throwEofException
is set
- * to true
.
- */
- private int doEndOfFile() throws EOFException {
- eof = true;
- if (throwEofException) {
- throw new EOFException();
- }
- return -1;
- }
-
-}
diff --git a/src/org/apache/commons/io/input/NullReader.java b/src/org/apache/commons/io/input/NullReader.java
deleted file mode 100644
index 159e39021..000000000
--- a/src/org/apache/commons/io/input/NullReader.java
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * A functional, light weight {@link Reader} that emulates
- * a reader of a specified size.
- *
- * This implementation provides a light weight
- * object for testing with an {@link Reader}
- * where the contents don't matter.
- *
- * One use case would be for testing the handling of
- * large {@link Reader} as it can emulate that
- * scenario without the overhead of actually processing
- * large numbers of characters - significantly speeding up
- * test execution times.
- *
- * This implementation returns a space from the method that
- * reads a character and leaves the array unchanged in the read
- * methods that are passed a character array.
- * If alternative data is required the processChar()
and
- * processChars()
methods can be implemented to generate
- * data, for example:
- *
- *
- * public class TestReader extends NullReader {
- * public TestReader(int size) {
- * super(size);
- * }
- * protected char processChar() {
- * return ... // return required value here
- * }
- * protected void processChars(char[] chars, int offset, int length) {
- * for (int i = offset; i < length; i++) {
- * chars[i] = ... // set array value here
- * }
- * }
- * }
- *
- *
- * @since Commons IO 1.3
- * @version $Revision: 463529 $
- */
-public class NullReader extends Reader {
-
- private long size;
- private long position;
- private long mark = -1;
- private long readlimit;
- private boolean eof;
- private boolean throwEofException;
- private boolean markSupported;
-
- /**
- * Create a {@link Reader} that emulates a specified size
- * which supports marking and does not throw EOFException.
- *
- * @param size The size of the reader to emulate.
- */
- public NullReader(long size) {
- this(size, true, false);
- }
-
- /**
- * Create a {@link Reader} that emulates a specified
- * size with option settings.
- *
- * @param size The size of the reader to emulate.
- * @param markSupported Whether this instance will support
- * the mark()
functionality.
- * @param throwEofException Whether this implementation
- * will throw an {@link EOFException} or return -1 when the
- * end of file is reached.
- */
- public NullReader(long size, boolean markSupported, boolean throwEofException) {
- this.size = size;
- this.markSupported = markSupported;
- this.throwEofException = throwEofException;
- }
-
- /**
- * Return the current position.
- *
- * @return the current position.
- */
- public long getPosition() {
- return position;
- }
-
- /**
- * Return the size this {@link Reader} emulates.
- *
- * @return The size of the reader to emulate.
- */
- public long getSize() {
- return size;
- }
-
- /**
- * Close this Reader - resets the internal state to
- * the initial values.
- *
- * @throws IOException If an error occurs.
- */
- public void close() throws IOException {
- eof = false;
- position = 0;
- mark = -1;
- }
-
- /**
- * Mark the current position.
- *
- * @param readlimit The number of characters before this marked position
- * is invalid.
- * @throws UnsupportedOperationException if mark is not supported.
- */
- public synchronized void mark(int readlimit) {
- if (!markSupported) {
- throw new UnsupportedOperationException("Mark not supported");
- }
- mark = position;
- this.readlimit = readlimit;
- }
-
- /**
- * Indicates whether mark is supported.
- *
- * @return Whether mark is supported or not.
- */
- public boolean markSupported() {
- return markSupported;
- }
-
- /**
- * Read a character.
- *
- * @return Either The character value returned by processChar()
- * or -1
if the end of file has been reached and
- * throwEofException
is set to false
.
- * @throws EOFException if the end of file is reached and
- * throwEofException
is set to true
.
- * @throws IOException if trying to read past the end of file.
- */
- public int read() throws IOException {
- if (eof) {
- throw new IOException("Read after end of file");
- }
- if (position == size) {
- return doEndOfFile();
- }
- position++;
- return processChar();
- }
-
- /**
- * Read some characters into the specified array.
- *
- * @param chars The character array to read into
- * @return The number of characters read or -1
- * if the end of file has been reached and
- * throwEofException
is set to false
.
- * @throws EOFException if the end of file is reached and
- * throwEofException
is set to true
.
- * @throws IOException if trying to read past the end of file.
- */
- public int read(char[] chars) throws IOException {
- return read(chars, 0, chars.length);
- }
-
- /**
- * Read the specified number characters into an array.
- *
- * @param chars The character array to read into.
- * @param offset The offset to start reading characters into.
- * @param length The number of characters to read.
- * @return The number of characters read or -1
- * if the end of file has been reached and
- * throwEofException
is set to false
.
- * @throws EOFException if the end of file is reached and
- * throwEofException
is set to true
.
- * @throws IOException if trying to read past the end of file.
- */
- public int read(char[] chars, int offset, int length) throws IOException {
- if (eof) {
- throw new IOException("Read after end of file");
- }
- if (position == size) {
- return doEndOfFile();
- }
- position += length;
- int returnLength = length;
- if (position > size) {
- returnLength = length - (int)(position - size);
- position = size;
- }
- processChars(chars, offset, returnLength);
- return returnLength;
- }
-
- /**
- * Reset the stream to the point when mark was last called.
- *
- * @throws UnsupportedOperationException if mark is not supported.
- * @throws IOException If no position has been marked
- * or the read limit has been exceed since the last position was
- * marked.
- */
- public synchronized void reset() throws IOException {
- if (!markSupported) {
- throw new UnsupportedOperationException("Mark not supported");
- }
- if (mark < 0) {
- throw new IOException("No position has been marked");
- }
- if (position > (mark + readlimit)) {
- throw new IOException("Marked position [" + mark +
- "] is no longer valid - passed the read limit [" +
- readlimit + "]");
- }
- position = mark;
- eof = false;
- }
-
- /**
- * Skip a specified number of characters.
- *
- * @param numberOfChars The number of characters to skip.
- * @return The number of characters skipped or -1
- * if the end of file has been reached and
- * throwEofException
is set to false
.
- * @throws EOFException if the end of file is reached and
- * throwEofException
is set to true
.
- * @throws IOException if trying to read past the end of file.
- */
- public long skip(long numberOfChars) throws IOException {
- if (eof) {
- throw new IOException("Skip after end of file");
- }
- if (position == size) {
- return doEndOfFile();
- }
- position += numberOfChars;
- long returnLength = numberOfChars;
- if (position > size) {
- returnLength = numberOfChars - (position - size);
- position = size;
- }
- return returnLength;
- }
-
- /**
- * Return a character value for the read()
method.
- *
- * This implementation returns zero.
- *
- * @return This implementation always returns zero.
- */
- protected int processChar() {
- // do nothing - overridable by subclass
- return 0;
- }
-
- /**
- * Process the characters for the read(char[], offset, length)
- * method.
- *
- * This implementation leaves the character array unchanged.
- *
- * @param chars The character array
- * @param offset The offset to start at.
- * @param length The number of characters.
- */
- protected void processChars(char[] chars, int offset, int length) {
- // do nothing - overridable by subclass
- }
-
- /**
- * Handle End of File.
- *
- * @return -1
if throwEofException
is
- * set to false
- * @throws EOFException if throwEofException
is set
- * to true
.
- */
- private int doEndOfFile() throws EOFException {
- eof = true;
- if (throwEofException) {
- throw new EOFException();
- }
- return -1;
- }
-
-}
diff --git a/src/org/apache/commons/io/input/ProxyInputStream.java b/src/org/apache/commons/io/input/ProxyInputStream.java
deleted file mode 100644
index a08ad92d0..000000000
--- a/src/org/apache/commons/io/input/ProxyInputStream.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * A Proxy stream which acts as expected, that is it passes the method
- * calls on to the proxied stream and doesn't change which methods are
- * being called.
- *
- * It is an alternative base class to FilterInputStream
- * to increase reusability, because FilterInputStream changes the
- * methods being called, such as read(byte[]) to read(byte[], int, int).
- *
- * @author Stephen Colebourne
- * @version $Id: ProxyInputStream.java 610010 2008-01-08 14:50:59Z niallp $
- */
-public abstract class ProxyInputStream extends FilterInputStream {
-
- /**
- * Constructs a new ProxyInputStream.
- *
- * @param proxy the InputStream to delegate to
- */
- public ProxyInputStream(InputStream proxy) {
- super(proxy);
- // the proxy is stored in a protected superclass variable named 'in'
- }
-
- /**
- * Invokes the delegate's read()
method.
- * @return the byte read or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- */
- public int read() throws IOException {
- return in.read();
- }
-
- /**
- * Invokes the delegate's read(byte[])
method.
- * @param bts the buffer to read the bytes into
- * @return the number of bytes read or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- */
- public int read(byte[] bts) throws IOException {
- return in.read(bts);
- }
-
- /**
- * Invokes the delegate's read(byte[], int, int)
method.
- * @param bts the buffer to read the bytes into
- * @param st The start offset
- * @param end The number of bytes to read
- * @return the number of bytes read or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- */
- public int read(byte[] bts, int st, int end) throws IOException {
- return in.read(bts, st, end);
- }
-
- /**
- * Invokes the delegate's skip(long)
method.
- * @param ln the number of bytes to skip
- * @return the number of bytes to skipped or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- */
- public long skip(long ln) throws IOException {
- return in.skip(ln);
- }
-
- /**
- * Invokes the delegate's available()
method.
- * @return the number of available bytes
- * @throws IOException if an I/O error occurs
- */
- public int available() throws IOException {
- return in.available();
- }
-
- /**
- * Invokes the delegate's close()
method.
- * @throws IOException if an I/O error occurs
- */
- public void close() throws IOException {
- in.close();
- }
-
- /**
- * Invokes the delegate's mark(int)
method.
- * @param idx read ahead limit
- */
- public synchronized void mark(int idx) {
- in.mark(idx);
- }
-
- /**
- * Invokes the delegate's reset()
method.
- * @throws IOException if an I/O error occurs
- */
- public synchronized void reset() throws IOException {
- in.reset();
- }
-
- /**
- * Invokes the delegate's markSupported()
method.
- * @return true if mark is supported, otherwise false
- */
- public boolean markSupported() {
- return in.markSupported();
- }
-
-}
diff --git a/src/org/apache/commons/io/input/ProxyReader.java b/src/org/apache/commons/io/input/ProxyReader.java
deleted file mode 100644
index d55290f5a..000000000
--- a/src/org/apache/commons/io/input/ProxyReader.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.FilterReader;
-import java.io.IOException;
-import java.io.Reader;
-
-/**
- * A Proxy stream which acts as expected, that is it passes the method
- * calls on to the proxied stream and doesn't change which methods are
- * being called.
- *
- * It is an alternative base class to FilterReader
- * to increase reusability, because FilterReader changes the
- * methods being called, such as read(char[]) to read(char[], int, int).
- *
- * @author Stephen Colebourne
- * @version $Id: ProxyReader.java 610010 2008-01-08 14:50:59Z niallp $
- */
-public abstract class ProxyReader extends FilterReader {
-
- /**
- * Constructs a new ProxyReader.
- *
- * @param proxy the Reader to delegate to
- */
- public ProxyReader(Reader proxy) {
- super(proxy);
- // the proxy is stored in a protected superclass variable named 'in'
- }
-
- /**
- * Invokes the delegate's read()
method.
- * @return the character read or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- */
- public int read() throws IOException {
- return in.read();
- }
-
- /**
- * Invokes the delegate's read(char[])
method.
- * @param chr the buffer to read the characters into
- * @return the number of characters read or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- */
- public int read(char[] chr) throws IOException {
- return in.read(chr);
- }
-
- /**
- * Invokes the delegate's read(char[], int, int)
method.
- * @param chr the buffer to read the characters into
- * @param st The start offset
- * @param end The number of bytes to read
- * @return the number of characters read or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- */
- public int read(char[] chr, int st, int end) throws IOException {
- return in.read(chr, st, end);
- }
-
- /**
- * Invokes the delegate's skip(long)
method.
- * @param ln the number of bytes to skip
- * @return the number of bytes to skipped or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- */
- public long skip(long ln) throws IOException {
- return in.skip(ln);
- }
-
- /**
- * Invokes the delegate's ready()
method.
- * @return true if the stream is ready to be read
- * @throws IOException if an I/O error occurs
- */
- public boolean ready() throws IOException {
- return in.ready();
- }
-
- /**
- * Invokes the delegate's close()
method.
- * @throws IOException if an I/O error occurs
- */
- public void close() throws IOException {
- in.close();
- }
-
- /**
- * Invokes the delegate's mark(int)
method.
- * @param idx read ahead limit
- * @throws IOException if an I/O error occurs
- */
- public synchronized void mark(int idx) throws IOException {
- in.mark(idx);
- }
-
- /**
- * Invokes the delegate's reset()
method.
- * @throws IOException if an I/O error occurs
- */
- public synchronized void reset() throws IOException {
- in.reset();
- }
-
- /**
- * Invokes the delegate's markSupported()
method.
- * @return true if mark is supported, otherwise false
- */
- public boolean markSupported() {
- return in.markSupported();
- }
-
-}
diff --git a/src/org/apache/commons/io/input/SwappedDataInputStream.java b/src/org/apache/commons/io/input/SwappedDataInputStream.java
deleted file mode 100644
index 5b65b1eee..000000000
--- a/src/org/apache/commons/io/input/SwappedDataInputStream.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.DataInput;
-import java.io.EOFException;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.apache.commons.io.EndianUtils;
-
-/**
- * DataInput for systems relying on little endian data formats.
- * When read, values will be changed from little endian to big
- * endian formats for internal usage.
- *
- * Origin of code: Avalon Excalibur (IO)
- *
- * @author Peter Donald
- * @version CVS $Revision: 610010 $ $Date: 2008-01-08 14:50:59 +0000 (Tue, 08 Jan 2008) $
- */
-public class SwappedDataInputStream extends ProxyInputStream
- implements DataInput
-{
-
- /**
- * Constructs a SwappedDataInputStream.
- *
- * @param input InputStream to read from
- */
- public SwappedDataInputStream( InputStream input )
- {
- super( input );
- }
-
- /**
- * Return {@link #readByte()} == 0
- * @return the true if the byte read is zero, otherwise false
- * @throws IOException if an I/O error occurs
- * @throws EOFException if an end of file is reached unexpectedly
- */
- public boolean readBoolean()
- throws IOException, EOFException
- {
- return ( 0 == readByte() );
- }
-
- /**
- * Invokes the delegate's read()
method.
- * @return the byte read or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- * @throws EOFException if an end of file is reached unexpectedly
- */
- public byte readByte()
- throws IOException, EOFException
- {
- return (byte)in.read();
- }
-
- /**
- * Reads a character delegating to {@link #readShort()}.
- * @return the byte read or -1 if the end of stream
- * @throws IOException if an I/O error occurs
- * @throws EOFException if an end of file is reached unexpectedly
- */
- public char readChar()
- throws IOException, EOFException
- {
- return (char)readShort();
- }
-
- /**
- * Delegates to {@link EndianUtils#readSwappedDouble(InputStream)}.
- * @return the read long
- * @throws IOException if an I/O error occurs
- * @throws EOFException if an end of file is reached unexpectedly
- */
- public double readDouble()
- throws IOException, EOFException
- {
- return EndianUtils.readSwappedDouble( in );
- }
-
- /**
- * Delegates to {@link EndianUtils#readSwappedFloat(InputStream)}.
- * @return the read long
- * @throws IOException if an I/O error occurs
- * @throws EOFException if an end of file is reached unexpectedly
- */
- public float readFloat()
- throws IOException, EOFException
- {
- return EndianUtils.readSwappedFloat( in );
- }
-
- /**
- * Invokes the delegate's read(byte[] data, int, int)
method.
- *
- * @param data the buffer to read the bytes into
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public void readFully( byte[] data )
- throws IOException, EOFException
- {
- readFully( data, 0, data.length );
- }
-
-
- /**
- * Invokes the delegate's read(byte[] data, int, int)
method.
- *
- * @param data the buffer to read the bytes into
- * @param offset The start offset
- * @param length The number of bytes to read
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public void readFully( byte[] data, int offset, int length )
- throws IOException, EOFException
- {
- int remaining = length;
-
- while( remaining > 0 )
- {
- int location = offset + ( length - remaining );
- int count = read( data, location, remaining );
-
- if( -1 == count )
- {
- throw new EOFException();
- }
-
- remaining -= count;
- }
- }
-
- /**
- * Delegates to {@link EndianUtils#readSwappedInteger(InputStream)}.
- * @return the read long
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public int readInt()
- throws IOException, EOFException
- {
- return EndianUtils.readSwappedInteger( in );
- }
-
- /**
- * Not currently supported - throws {@link UnsupportedOperationException}.
- * @return the line read
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public String readLine()
- throws IOException, EOFException
- {
- throw new UnsupportedOperationException(
- "Operation not supported: readLine()" );
- }
-
- /**
- * Delegates to {@link EndianUtils#readSwappedLong(InputStream)}.
- * @return the read long
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public long readLong()
- throws IOException, EOFException
- {
- return EndianUtils.readSwappedLong( in );
- }
-
- /**
- * Delegates to {@link EndianUtils#readSwappedShort(InputStream)}.
- * @return the read long
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public short readShort()
- throws IOException, EOFException
- {
- return EndianUtils.readSwappedShort( in );
- }
-
- /**
- * Invokes the delegate's read()
method.
- * @return the byte read or -1 if the end of stream
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public int readUnsignedByte()
- throws IOException, EOFException
- {
- return in.read();
- }
-
- /**
- * Delegates to {@link EndianUtils#readSwappedUnsignedShort(InputStream)}.
- * @return the read long
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public int readUnsignedShort()
- throws IOException, EOFException
- {
- return EndianUtils.readSwappedUnsignedShort( in );
- }
-
- /**
- * Not currently supported - throws {@link UnsupportedOperationException}.
- * @return UTF String read
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public String readUTF()
- throws IOException, EOFException
- {
- throw new UnsupportedOperationException(
- "Operation not supported: readUTF()" );
- }
-
- /**
- * Invokes the delegate's skip(int)
method.
- * @param count the number of bytes to skip
- * @return the number of bytes to skipped or -1 if the end of stream
- * @throws EOFException if an end of file is reached unexpectedly
- * @throws IOException if an I/O error occurs
- */
- public int skipBytes( int count )
- throws IOException, EOFException
- {
- return (int)in.skip( count );
- }
-
-}
diff --git a/src/org/apache/commons/io/input/TeeInputStream.java b/src/org/apache/commons/io/input/TeeInputStream.java
deleted file mode 100644
index fed000ed6..000000000
--- a/src/org/apache/commons/io/input/TeeInputStream.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.input;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * InputStream proxy that transparently writes a copy of all bytes read
- * from the proxied stream to a given OutputStream. Using {@link #skip(long)}
- * or {@link #mark(int)}/{@link #reset()} on the stream will result on some
- * bytes from the input stream being skipped or duplicated in the output
- * stream.
- *
- * The proxied input stream is closed when the {@link #close()} method is
- * called on this proxy. It is configurable whether the associated output
- * stream will also closed.
- *
- * @version $Id: TeeInputStream.java 587913 2007-10-24 15:47:30Z niallp $
- * @since Commons IO 1.4
- */
-public class TeeInputStream extends ProxyInputStream {
-
- /**
- * The output stream that will receive a copy of all bytes read from the
- * proxied input stream.
- */
- private final OutputStream branch;
-
- /**
- * Flag for closing also the associated output stream when this
- * stream is closed.
- */
- private final boolean closeBranch;
-
- /**
- * Creates a TeeInputStream that proxies the given {@link InputStream}
- * and copies all read bytes to the given {@link OutputStream}. The given
- * output stream will not be closed when this stream gets closed.
- *
- * @param input input stream to be proxied
- * @param branch output stream that will receive a copy of all bytes read
- */
- public TeeInputStream(InputStream input, OutputStream branch) {
- this(input, branch, false);
- }
-
- /**
- * Creates a TeeInputStream that proxies the given {@link InputStream}
- * and copies all read bytes to the given {@link OutputStream}. The given
- * output stream will be closed when this stream gets closed if the
- * closeBranch parameter is true
.
- *
- * @param input input stream to be proxied
- * @param branch output stream that will receive a copy of all bytes read
- * @param closeBranch flag for closing also the output stream when this
- * stream is closed
- */
- public TeeInputStream(
- InputStream input, OutputStream branch, boolean closeBranch) {
- super(input);
- this.branch = branch;
- this.closeBranch = closeBranch;
- }
-
- /**
- * Closes the proxied input stream and, if so configured, the associated
- * output stream. An exception thrown from one stream will not prevent
- * closing of the other stream.
- *
- * @throws IOException if either of the streams could not be closed
- */
- public void close() throws IOException {
- try {
- super.close();
- } finally {
- if (closeBranch) {
- branch.close();
- }
- }
- }
-
- /**
- * Reads a single byte from the proxied input stream and writes it to
- * the associated output stream.
- *
- * @return next byte from the stream, or -1 if the stream has ended
- * @throws IOException if the stream could not be read (or written)
- */
- public int read() throws IOException {
- int ch = super.read();
- if (ch != -1) {
- branch.write(ch);
- }
- return ch;
- }
-
- /**
- * Reads bytes from the proxied input stream and writes the read bytes
- * to the associated output stream.
- *
- * @param bts byte buffer
- * @param st start offset within the buffer
- * @param end maximum number of bytes to read
- * @return number of bytes read, or -1 if the stream has ended
- * @throws IOException if the stream could not be read (or written)
- */
- public int read(byte[] bts, int st, int end) throws IOException {
- int n = super.read(bts, st, end);
- if (n != -1) {
- branch.write(bts, st, n);
- }
- return n;
- }
-
- /**
- * Reads bytes from the proxied input stream and writes the read bytes
- * to the associated output stream.
- *
- * @param bts byte buffer
- * @return number of bytes read, or -1 if the stream has ended
- * @throws IOException if the stream could not be read (or written)
- */
- public int read(byte[] bts) throws IOException {
- int n = super.read(bts);
- if (n != -1) {
- branch.write(bts, 0, n);
- }
- return n;
- }
-
-}
diff --git a/src/org/apache/commons/io/input/package.html b/src/org/apache/commons/io/input/package.html
deleted file mode 100644
index 9aa8b15ba..000000000
--- a/src/org/apache/commons/io/input/package.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-This package provides implementations of input classes, such as
-InputStream
and Reader
.
-
-
-
diff --git a/src/org/apache/commons/io/output/ByteArrayOutputStream.java b/src/org/apache/commons/io/output/ByteArrayOutputStream.java
deleted file mode 100644
index 66d5e8dc3..000000000
--- a/src/org/apache/commons/io/output/ByteArrayOutputStream.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class implements an output stream in which the data is
- * written into a byte array. The buffer automatically grows as data
- * is written to it.
- *
- * The data can be retrieved using toByteArray()
and
- * toString()
.
- *
- * Closing a ByteArrayOutputStream has no effect. The methods in
- * this class can be called after the stream has been closed without
- * generating an IOException.
- *
- * This is an alternative implementation of the java.io.ByteArrayOutputStream
- * class. The original implementation only allocates 32 bytes at the beginning.
- * As this class is designed for heavy duty it starts at 1024 bytes. In contrast
- * to the original it doesn't reallocate the whole memory block but allocates
- * additional buffers. This way no buffers need to be garbage collected and
- * the contents don't have to be copied to the new buffer. This class is
- * designed to behave exactly like the original. The only exception is the
- * deprecated toString(int) method that has been ignored.
- *
- * @author Jeremias Maerki
- * @author Holger Hoffstatte
- * @version $Id: ByteArrayOutputStream.java 610010 2008-01-08 14:50:59Z niallp $
- */
-public class ByteArrayOutputStream extends OutputStream {
-
- /** A singleton empty byte array. */
- private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
-
- /** The list of buffers, which grows and never reduces. */
- private List buffers = new ArrayList();
- /** The index of the current buffer. */
- private int currentBufferIndex;
- /** The total count of bytes in all the filled buffers. */
- private int filledBufferSum;
- /** The current buffer. */
- private byte[] currentBuffer;
- /** The total count of bytes written. */
- private int count;
-
- /**
- * Creates a new byte array output stream. The buffer capacity is
- * initially 1024 bytes, though its size increases if necessary.
- */
- public ByteArrayOutputStream() {
- this(1024);
- }
-
- /**
- * Creates a new byte array output stream, with a buffer capacity of
- * the specified size, in bytes.
- *
- * @param size the initial size
- * @throws IllegalArgumentException if size is negative
- */
- public ByteArrayOutputStream(int size) {
- if (size < 0) {
- throw new IllegalArgumentException(
- "Negative initial size: " + size);
- }
- needNewBuffer(size);
- }
-
- /**
- * Return the appropriate byte[]
buffer
- * specified by index.
- *
- * @param index the index of the buffer required
- * @return the buffer
- */
- private byte[] getBuffer(int index) {
- return (byte[]) buffers.get(index);
- }
-
- /**
- * Makes a new buffer available either by allocating
- * a new one or re-cycling an existing one.
- *
- * @param newcount the size of the buffer if one is created
- */
- private void needNewBuffer(int newcount) {
- if (currentBufferIndex < buffers.size() - 1) {
- //Recycling old buffer
- filledBufferSum += currentBuffer.length;
-
- currentBufferIndex++;
- currentBuffer = getBuffer(currentBufferIndex);
- } else {
- //Creating new buffer
- int newBufferSize;
- if (currentBuffer == null) {
- newBufferSize = newcount;
- filledBufferSum = 0;
- } else {
- newBufferSize = Math.max(
- currentBuffer.length << 1,
- newcount - filledBufferSum);
- filledBufferSum += currentBuffer.length;
- }
-
- currentBufferIndex++;
- currentBuffer = new byte[newBufferSize];
- buffers.add(currentBuffer);
- }
- }
-
- /**
- * Write the bytes to byte array.
- * @param b the bytes to write
- * @param off The start offset
- * @param len The number of bytes to write
- */
- public void write(byte[] b, int off, int len) {
- if ((off < 0)
- || (off > b.length)
- || (len < 0)
- || ((off + len) > b.length)
- || ((off + len) < 0)) {
- throw new IndexOutOfBoundsException();
- } else if (len == 0) {
- return;
- }
- synchronized (this) {
- int newcount = count + len;
- int remaining = len;
- int inBufferPos = count - filledBufferSum;
- while (remaining > 0) {
- int part = Math.min(remaining, currentBuffer.length - inBufferPos);
- System.arraycopy(b, off + len - remaining, currentBuffer, inBufferPos, part);
- remaining -= part;
- if (remaining > 0) {
- needNewBuffer(newcount);
- inBufferPos = 0;
- }
- }
- count = newcount;
- }
- }
-
- /**
- * Write a byte to byte array.
- * @param b the byte to write
- */
- public synchronized void write(int b) {
- int inBufferPos = count - filledBufferSum;
- if (inBufferPos == currentBuffer.length) {
- needNewBuffer(count + 1);
- inBufferPos = 0;
- }
- currentBuffer[inBufferPos] = (byte) b;
- count++;
- }
-
- /**
- * Writes the entire contents of the specified input stream to this
- * byte stream. Bytes from the input stream are read directly into the
- * internal buffers of this streams.
- *
- * @param in the input stream to read from
- * @return total number of bytes read from the input stream
- * (and written to this stream)
- * @throws IOException if an I/O error occurs while reading the input stream
- * @since Commons IO 1.4
- */
- public synchronized int write(InputStream in) throws IOException {
- int readCount = 0;
- int inBufferPos = count - filledBufferSum;
- int n = in.read(currentBuffer, inBufferPos, currentBuffer.length - inBufferPos);
- while (n != -1) {
- readCount += n;
- inBufferPos += n;
- count += n;
- if (inBufferPos == currentBuffer.length) {
- needNewBuffer(currentBuffer.length);
- inBufferPos = 0;
- }
- n = in.read(currentBuffer, inBufferPos, currentBuffer.length - inBufferPos);
- }
- return readCount;
- }
-
- /**
- * Return the current size of the byte array.
- * @return the current size of the byte array
- */
- public synchronized int size() {
- return count;
- }
-
- /**
- * Closing a ByteArrayOutputStream has no effect. The methods in
- * this class can be called after the stream has been closed without
- * generating an IOException.
- *
- * @throws IOException never (this method should not declare this exception
- * but it has to now due to backwards compatability)
- */
- public void close() throws IOException {
- //nop
- }
-
- /**
- * @see java.io.ByteArrayOutputStream#reset()
- */
- public synchronized void reset() {
- count = 0;
- filledBufferSum = 0;
- currentBufferIndex = 0;
- currentBuffer = getBuffer(currentBufferIndex);
- }
-
- /**
- * Writes the entire contents of this byte stream to the
- * specified output stream.
- *
- * @param out the output stream to write to
- * @throws IOException if an I/O error occurs, such as if the stream is closed
- * @see java.io.ByteArrayOutputStream#writeTo(OutputStream)
- */
- public synchronized void writeTo(OutputStream out) throws IOException {
- int remaining = count;
- for (int i = 0; i < buffers.size(); i++) {
- byte[] buf = getBuffer(i);
- int c = Math.min(buf.length, remaining);
- out.write(buf, 0, c);
- remaining -= c;
- if (remaining == 0) {
- break;
- }
- }
- }
-
- /**
- * Gets the curent contents of this byte stream as a byte array.
- * The result is independent of this stream.
- *
- * @return the current contents of this output stream, as a byte array
- * @see java.io.ByteArrayOutputStream#toByteArray()
- */
- public synchronized byte[] toByteArray() {
- int remaining = count;
- if (remaining == 0) {
- return EMPTY_BYTE_ARRAY;
- }
- byte newbuf[] = new byte[remaining];
- int pos = 0;
- for (int i = 0; i < buffers.size(); i++) {
- byte[] buf = getBuffer(i);
- int c = Math.min(buf.length, remaining);
- System.arraycopy(buf, 0, newbuf, pos, c);
- pos += c;
- remaining -= c;
- if (remaining == 0) {
- break;
- }
- }
- return newbuf;
- }
-
- /**
- * Gets the curent contents of this byte stream as a string.
- * @return the contents of the byte array as a String
- * @see java.io.ByteArrayOutputStream#toString()
- */
- public String toString() {
- return new String(toByteArray());
- }
-
- /**
- * Gets the curent contents of this byte stream as a string
- * using the specified encoding.
- *
- * @param enc the name of the character encoding
- * @return the string converted from the byte array
- * @throws UnsupportedEncodingException if the encoding is not supported
- * @see java.io.ByteArrayOutputStream#toString(String)
- */
- public String toString(String enc) throws UnsupportedEncodingException {
- return new String(toByteArray(), enc);
- }
-
-}
diff --git a/src/org/apache/commons/io/output/CloseShieldOutputStream.java b/src/org/apache/commons/io/output/CloseShieldOutputStream.java
deleted file mode 100644
index 63f44be40..000000000
--- a/src/org/apache/commons/io/output/CloseShieldOutputStream.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.OutputStream;
-
-/**
- * Proxy stream that prevents the underlying output stream from being closed.
- *
- * This class is typically used in cases where an output stream needs to be
- * passed to a component that wants to explicitly close the stream even if
- * other components would still use the stream for output.
- *
- * @version $Id: CloseShieldOutputStream.java 587913 2007-10-24 15:47:30Z niallp $
- * @since Commons IO 1.4
- */
-public class CloseShieldOutputStream extends ProxyOutputStream {
-
- /**
- * Creates a proxy that shields the given output stream from being
- * closed.
- *
- * @param out underlying output stream
- */
- public CloseShieldOutputStream(OutputStream out) {
- super(out);
- }
-
- /**
- * Replaces the underlying output stream with a {@link ClosedOutputStream}
- * sentinel. The original output stream will remain open, but this proxy
- * will appear closed.
- */
- public void close() {
- out = new ClosedOutputStream();
- }
-
-}
diff --git a/src/org/apache/commons/io/output/ClosedOutputStream.java b/src/org/apache/commons/io/output/ClosedOutputStream.java
deleted file mode 100644
index b585c0cf4..000000000
--- a/src/org/apache/commons/io/output/ClosedOutputStream.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Closed output stream. This stream throws an exception on all attempts to
- * write something to the stream.
- *
- * Typically uses of this class include testing for corner cases in methods
- * that accept an output stream and acting as a sentinel value instead of
- * a null
output stream.
- *
- * @version $Id: ClosedOutputStream.java 601751 2007-12-06 14:55:45Z niallp $
- * @since Commons IO 1.4
- */
-public class ClosedOutputStream extends OutputStream {
-
- /**
- * A singleton.
- */
- public static final ClosedOutputStream CLOSED_OUTPUT_STREAM = new ClosedOutputStream();
-
- /**
- * Throws an {@link IOException} to indicate that the stream is closed.
- *
- * @param b ignored
- * @throws IOException always thrown
- */
- public void write(int b) throws IOException {
- throw new IOException("write(" + b + ") failed: stream is closed");
- }
-
-}
diff --git a/src/org/apache/commons/io/output/CountingOutputStream.java b/src/org/apache/commons/io/output/CountingOutputStream.java
deleted file mode 100644
index 672882860..000000000
--- a/src/org/apache/commons/io/output/CountingOutputStream.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * A decorating output stream that counts the number of bytes that have passed
- * through the stream so far.
- *
- * A typical use case would be during debugging, to ensure that data is being
- * written as expected.
- *
- * @version $Id: CountingOutputStream.java 471628 2006-11-06 04:06:45Z bayard $
- */
-public class CountingOutputStream extends ProxyOutputStream {
-
- /** The count of bytes that have passed. */
- private long count;
-
- /**
- * Constructs a new CountingOutputStream.
- *
- * @param out the OutputStream to write to
- */
- public CountingOutputStream( OutputStream out ) {
- super(out);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Writes the contents of the specified byte array to this output stream
- * keeping count of the number of bytes written.
- *
- * @param b the bytes to write, not null
- * @throws IOException if an I/O error occurs
- * @see java.io.OutputStream#write(byte[])
- */
- public void write(byte[] b) throws IOException {
- count += b.length;
- super.write(b);
- }
-
- /**
- * Writes a portion of the specified byte array to this output stream
- * keeping count of the number of bytes written.
- *
- * @param b the bytes to write, not null
- * @param off the start offset in the buffer
- * @param len the maximum number of bytes to write
- * @throws IOException if an I/O error occurs
- * @see java.io.OutputStream#write(byte[], int, int)
- */
- public void write(byte[] b, int off, int len) throws IOException {
- count += len;
- super.write(b, off, len);
- }
-
- /**
- * Writes a single byte to the output stream adding to the count of the
- * number of bytes written.
- *
- * @param b the byte to write
- * @throws IOException if an I/O error occurs
- * @see java.io.OutputStream#write(int)
- */
- public void write(int b) throws IOException {
- count++;
- super.write(b);
- }
-
- //-----------------------------------------------------------------------
- /**
- * The number of bytes that have passed through this stream.
- *
- * NOTE: From v1.3 this method throws an ArithmeticException if the
- * count is greater than can be expressed by an int
.
- * See {@link #getByteCount()} for a method using a long
.
- *
- * @return the number of bytes accumulated
- * @throws ArithmeticException if the byte count is too large
- */
- public synchronized int getCount() {
- long result = getByteCount();
- if (result > Integer.MAX_VALUE) {
- throw new ArithmeticException("The byte count " + result + " is too large to be converted to an int");
- }
- return (int) result;
- }
-
- /**
- * Set the byte count back to 0.
- *
- * NOTE: From v1.3 this method throws an ArithmeticException if the
- * count is greater than can be expressed by an int
.
- * See {@link #resetByteCount()} for a method using a long
.
- *
- * @return the count previous to resetting
- * @throws ArithmeticException if the byte count is too large
- */
- public synchronized int resetCount() {
- long result = resetByteCount();
- if (result > Integer.MAX_VALUE) {
- throw new ArithmeticException("The byte count " + result + " is too large to be converted to an int");
- }
- return (int) result;
- }
-
- /**
- * The number of bytes that have passed through this stream.
- *
- * NOTE: This method is an alternative for getCount()
.
- * It was added because that method returns an integer which will
- * result in incorrect count for files over 2GB.
- *
- * @return the number of bytes accumulated
- * @since Commons IO 1.3
- */
- public synchronized long getByteCount() {
- return this.count;
- }
-
- /**
- * Set the byte count back to 0.
- *
- * NOTE: This method is an alternative for resetCount()
.
- * It was added because that method returns an integer which will
- * result in incorrect count for files over 2GB.
- *
- * @return the count previous to resetting
- * @since Commons IO 1.3
- */
- public synchronized long resetByteCount() {
- long tmp = this.count;
- this.count = 0;
- return tmp;
- }
-
-}
diff --git a/src/org/apache/commons/io/output/DeferredFileOutputStream.java b/src/org/apache/commons/io/output/DeferredFileOutputStream.java
deleted file mode 100644
index b8a9e9607..000000000
--- a/src/org/apache/commons/io/output/DeferredFileOutputStream.java
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.apache.commons.io.IOUtils;
-
-
-/**
- * An output stream which will retain data in memory until a specified
- * threshold is reached, and only then commit it to disk. If the stream is
- * closed before the threshold is reached, the data will not be written to
- * disk at all.
- *
- * This class originated in FileUpload processing. In this use case, you do
- * not know in advance the size of the file being uploaded. If the file is small
- * you want to store it in memory (for speed), but if the file is large you want
- * to store it to file (to avoid memory issues).
- *
- * @author Martin Cooper
- * @author gaxzerow
- *
- * @version $Id: DeferredFileOutputStream.java 606381 2007-12-22 02:03:16Z ggregory $
- */
-public class DeferredFileOutputStream
- extends ThresholdingOutputStream
-{
-
- // ----------------------------------------------------------- Data members
-
-
- /**
- * The output stream to which data will be written prior to the theshold
- * being reached.
- */
- private ByteArrayOutputStream memoryOutputStream;
-
-
- /**
- * The output stream to which data will be written at any given time. This
- * will always be one of memoryOutputStream
or
- * diskOutputStream
.
- */
- private OutputStream currentOutputStream;
-
-
- /**
- * The file to which output will be directed if the threshold is exceeded.
- */
- private File outputFile;
-
- /**
- * The temporary file prefix.
- */
- private String prefix;
-
- /**
- * The temporary file suffix.
- */
- private String suffix;
-
- /**
- * The directory to use for temporary files.
- */
- private File directory;
-
-
- /**
- * True when close() has been called successfully.
- */
- private boolean closed = false;
-
- // ----------------------------------------------------------- Constructors
-
-
- /**
- * Constructs an instance of this class which will trigger an event at the
- * specified threshold, and save data to a file beyond that point.
- *
- * @param threshold The number of bytes at which to trigger an event.
- * @param outputFile The file to which data is saved beyond the threshold.
- */
- public DeferredFileOutputStream(int threshold, File outputFile)
- {
- super(threshold);
- this.outputFile = outputFile;
-
- memoryOutputStream = new ByteArrayOutputStream();
- currentOutputStream = memoryOutputStream;
- }
-
-
- /**
- * Constructs an instance of this class which will trigger an event at the
- * specified threshold, and save data to a temporary file beyond that point.
- *
- * @param threshold The number of bytes at which to trigger an event.
- * @param prefix Prefix to use for the temporary file.
- * @param suffix Suffix to use for the temporary file.
- * @param directory Temporary file directory.
- *
- * @since Commons IO 1.4
- */
- public DeferredFileOutputStream(int threshold, String prefix, String suffix, File directory)
- {
- this(threshold, (File)null);
- if (prefix == null) {
- throw new IllegalArgumentException("Temporary file prefix is missing");
- }
- this.prefix = prefix;
- this.suffix = suffix;
- this.directory = directory;
- }
-
-
- // --------------------------------------- ThresholdingOutputStream methods
-
-
- /**
- * Returns the current output stream. This may be memory based or disk
- * based, depending on the current state with respect to the threshold.
- *
- * @return The underlying output stream.
- *
- * @exception IOException if an error occurs.
- */
- protected OutputStream getStream() throws IOException
- {
- return currentOutputStream;
- }
-
-
- /**
- * Switches the underlying output stream from a memory based stream to one
- * that is backed by disk. This is the point at which we realise that too
- * much data is being written to keep in memory, so we elect to switch to
- * disk-based storage.
- *
- * @exception IOException if an error occurs.
- */
- protected void thresholdReached() throws IOException
- {
- if (prefix != null) {
- outputFile = File.createTempFile(prefix, suffix, directory);
- }
- FileOutputStream fos = new FileOutputStream(outputFile);
- memoryOutputStream.writeTo(fos);
- currentOutputStream = fos;
- memoryOutputStream = null;
- }
-
-
- // --------------------------------------------------------- Public methods
-
-
- /**
- * Determines whether or not the data for this output stream has been
- * retained in memory.
- *
- * @return true
if the data is available in memory;
- * false
otherwise.
- */
- public boolean isInMemory()
- {
- return (!isThresholdExceeded());
- }
-
-
- /**
- * Returns the data for this output stream as an array of bytes, assuming
- * that the data has been retained in memory. If the data was written to
- * disk, this method returns null
.
- *
- * @return The data for this output stream, or null
if no such
- * data is available.
- */
- public byte[] getData()
- {
- if (memoryOutputStream != null)
- {
- return memoryOutputStream.toByteArray();
- }
- return null;
- }
-
-
- /**
- * Returns either the output file specified in the constructor or
- * the temporary file created or null.
- *
- * If the constructor specifying the file is used then it returns that
- * same output file, even when threashold has not been reached.
- *
- * If constructor specifying a temporary file prefix/suffix is used
- * then the temporary file created once the threashold is reached is returned
- * If the threshold was not reached then null
is returned.
- *
- * @return The file for this output stream, or null
if no such
- * file exists.
- */
- public File getFile()
- {
- return outputFile;
- }
-
-
- /**
- * Closes underlying output stream, and mark this as closed
- *
- * @exception IOException if an error occurs.
- */
- public void close() throws IOException
- {
- super.close();
- closed = true;
- }
-
-
- /**
- * Writes the data from this output stream to the specified output stream,
- * after it has been closed.
- *
- * @param out output stream to write to.
- * @exception IOException if this stream is not yet closed or an error occurs.
- */
- public void writeTo(OutputStream out) throws IOException
- {
- // we may only need to check if this is closed if we are working with a file
- // but we should force the habit of closing wether we are working with
- // a file or memory.
- if (!closed)
- {
- throw new IOException("Stream not closed");
- }
-
- if(isInMemory())
- {
- memoryOutputStream.writeTo(out);
- }
- else
- {
- FileInputStream fis = new FileInputStream(outputFile);
- try {
- IOUtils.copy(fis, out);
- } finally {
- IOUtils.closeQuietly(fis);
- }
- }
- }
-}
diff --git a/src/org/apache/commons/io/output/DemuxOutputStream.java b/src/org/apache/commons/io/output/DemuxOutputStream.java
deleted file mode 100644
index 086911118..000000000
--- a/src/org/apache/commons/io/output/DemuxOutputStream.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Data written to this stream is forwarded to a stream that has been associated
- * with this thread.
- *
- * @author Peter Donald
- * @version $Revision: 437567 $ $Date: 2006-08-28 07:39:07 +0100 (Mon, 28 Aug 2006) $
- */
-public class DemuxOutputStream
- extends OutputStream
-{
- private InheritableThreadLocal m_streams = new InheritableThreadLocal();
-
- /**
- * Bind the specified stream to the current thread.
- *
- * @param output the stream to bind
- * @return the OutputStream that was previously active
- */
- public OutputStream bindStream( OutputStream output )
- {
- OutputStream stream = getStream();
- m_streams.set( output );
- return stream;
- }
-
- /**
- * Closes stream associated with current thread.
- *
- * @throws IOException if an error occurs
- */
- public void close()
- throws IOException
- {
- OutputStream output = getStream();
- if( null != output )
- {
- output.close();
- }
- }
-
- /**
- * Flushes stream associated with current thread.
- *
- * @throws IOException if an error occurs
- */
- public void flush()
- throws IOException
- {
- OutputStream output = getStream();
- if( null != output )
- {
- output.flush();
- }
- }
-
- /**
- * Writes byte to stream associated with current thread.
- *
- * @param ch the byte to write to stream
- * @throws IOException if an error occurs
- */
- public void write( int ch )
- throws IOException
- {
- OutputStream output = getStream();
- if( null != output )
- {
- output.write( ch );
- }
- }
-
- /**
- * Utility method to retrieve stream bound to current thread (if any).
- *
- * @return the output stream
- */
- private OutputStream getStream()
- {
- return (OutputStream)m_streams.get();
- }
-}
diff --git a/src/org/apache/commons/io/output/FileWriterWithEncoding.java b/src/org/apache/commons/io/output/FileWriterWithEncoding.java
deleted file mode 100644
index a8f89334b..000000000
--- a/src/org/apache/commons/io/output/FileWriterWithEncoding.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-
-/**
- * Writer of files that allows the encoding to be set.
- *
- * This class provides a simple alternative to FileWriter
- * that allows an encoding to be set. Unfortunately, it cannot subclass
- * FileWriter
.
- *
- * By default, the file will be overwritten, but this may be changed to append.
- *
- * The encoding must be specified using either the name of the {@link Charset},
- * the {@link Charset}, or a {@link CharsetEncoder}. If the default encoding
- * is required then use the {@link java.io.FileWriter} directly, rather than
- * this implementation.
- *
- *
- *
- * @since Commons IO 1.4
- * @version $Id: FileWriterWithEncoding.java 611634 2008-01-13 20:35:00Z niallp $
- */
-public class FileWriterWithEncoding extends Writer {
- // Cannot extend ProxyWriter, as requires writer to be
- // known when super() is called
-
- /** The writer to decorate. */
- private final Writer out;
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param filename the name of the file to write to, not null
- * @param encoding the encoding to use, not null
- * @throws NullPointerException if the file name or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(String filename, String encoding) throws IOException {
- this(new File(filename), encoding, false);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param filename the name of the file to write to, not null
- * @param encoding the encoding to use, not null
- * @param append true if content should be appended, false to overwrite
- * @throws NullPointerException if the file name or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(String filename, String encoding, boolean append) throws IOException {
- this(new File(filename), encoding, append);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param filename the name of the file to write to, not null
- * @param encoding the encoding to use, not null
- * @throws NullPointerException if the file name or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(String filename, Charset encoding) throws IOException {
- this(new File(filename), encoding, false);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param filename the name of the file to write to, not null
- * @param encoding the encoding to use, not null
- * @param append true if content should be appended, false to overwrite
- * @throws NullPointerException if the file name or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(String filename, Charset encoding, boolean append) throws IOException {
- this(new File(filename), encoding, append);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param filename the name of the file to write to, not null
- * @param encoding the encoding to use, not null
- * @throws NullPointerException if the file name or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(String filename, CharsetEncoder encoding) throws IOException {
- this(new File(filename), encoding, false);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param filename the name of the file to write to, not null
- * @param encoding the encoding to use, not null
- * @param append true if content should be appended, false to overwrite
- * @throws NullPointerException if the file name or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(String filename, CharsetEncoder encoding, boolean append) throws IOException {
- this(new File(filename), encoding, append);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param file the file to write to, not null
- * @param encoding the encoding to use, not null
- * @throws NullPointerException if the file or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(File file, String encoding) throws IOException {
- this(file, encoding, false);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param file the file to write to, not null
- * @param encoding the encoding to use, not null
- * @param append true if content should be appended, false to overwrite
- * @throws NullPointerException if the file or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(File file, String encoding, boolean append) throws IOException {
- super();
- this.out = initWriter(file, encoding, append);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param file the file to write to, not null
- * @param encoding the encoding to use, not null
- * @throws NullPointerException if the file or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(File file, Charset encoding) throws IOException {
- this(file, encoding, false);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param file the file to write to, not null
- * @param encoding the encoding to use, not null
- * @param append true if content should be appended, false to overwrite
- * @throws NullPointerException if the file or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(File file, Charset encoding, boolean append) throws IOException {
- super();
- this.out = initWriter(file, encoding, append);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param file the file to write to, not null
- * @param encoding the encoding to use, not null
- * @throws NullPointerException if the file or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(File file, CharsetEncoder encoding) throws IOException {
- this(file, encoding, false);
- }
-
- /**
- * Constructs a FileWriterWithEncoding with a file encoding.
- *
- * @param file the file to write to, not null
- * @param encoding the encoding to use, not null
- * @param append true if content should be appended, false to overwrite
- * @throws NullPointerException if the file or encoding is null
- * @throws IOException in case of an I/O error
- */
- public FileWriterWithEncoding(File file, CharsetEncoder encoding, boolean append) throws IOException {
- super();
- this.out = initWriter(file, encoding, append);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Initialise the wrapped file writer.
- * Ensure that a cleanup occurs if the writer creation fails.
- *
- * @param file the file to be accessed
- * @param encoding the encoding to use - may be Charset, CharsetEncoder or String
- * @param append true to append
- * @return the initialised writer
- * @throws NullPointerException if the file or encoding is null
- * @throws IOException if an error occurs
- */
- private static Writer initWriter(File file, Object encoding, boolean append) throws IOException {
- if (file == null) {
- throw new NullPointerException("File is missing");
- }
- if (encoding == null) {
- throw new NullPointerException("Encoding is missing");
- }
- boolean fileExistedAlready = file.exists();
- OutputStream stream = null;
- Writer writer = null;
- try {
- stream = new FileOutputStream(file, append);
- if (encoding instanceof Charset) {
- writer = new OutputStreamWriter(stream, (Charset)encoding);
- } else if (encoding instanceof CharsetEncoder) {
- writer = new OutputStreamWriter(stream, (CharsetEncoder)encoding);
- } else {
- writer = new OutputStreamWriter(stream, (String)encoding);
- }
- } catch (IOException ex) {
- IOUtils.closeQuietly(writer);
- IOUtils.closeQuietly(stream);
- if (fileExistedAlready == false) {
- FileUtils.deleteQuietly(file);
- }
- throw ex;
- } catch (RuntimeException ex) {
- IOUtils.closeQuietly(writer);
- IOUtils.closeQuietly(stream);
- if (fileExistedAlready == false) {
- FileUtils.deleteQuietly(file);
- }
- throw ex;
- }
- return writer;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Write a character.
- * @param idx the character to write
- * @throws IOException if an I/O error occurs
- */
- public void write(int idx) throws IOException {
- out.write(idx);
- }
-
- /**
- * Write the characters from an array.
- * @param chr the characters to write
- * @throws IOException if an I/O error occurs
- */
- public void write(char[] chr) throws IOException {
- out.write(chr);
- }
-
- /**
- * Write the specified characters from an array.
- * @param chr the characters to write
- * @param st The start offset
- * @param end The number of characters to write
- * @throws IOException if an I/O error occurs
- */
- public void write(char[] chr, int st, int end) throws IOException {
- out.write(chr, st, end);
- }
-
- /**
- * Write the characters from a string.
- * @param str the string to write
- * @throws IOException if an I/O error occurs
- */
- public void write(String str) throws IOException {
- out.write(str);
- }
-
- /**
- * Write the specified characters from a string.
- * @param str the string to write
- * @param st The start offset
- * @param end The number of characters to write
- * @throws IOException if an I/O error occurs
- */
- public void write(String str, int st, int end) throws IOException {
- out.write(str, st, end);
- }
-
- /**
- * Flush the stream.
- * @throws IOException if an I/O error occurs
- */
- public void flush() throws IOException {
- out.flush();
- }
-
- /**
- * Close the stream.
- * @throws IOException if an I/O error occurs
- */
- public void close() throws IOException {
- out.close();
- }
-}
diff --git a/src/org/apache/commons/io/output/LockableFileWriter.java b/src/org/apache/commons/io/output/LockableFileWriter.java
deleted file mode 100644
index 6b10bd282..000000000
--- a/src/org/apache/commons/io/output/LockableFileWriter.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
-
-/**
- * FileWriter that will create and honor lock files to allow simple
- * cross thread file lock handling.
- *
- * This class provides a simple alternative to FileWriter
- * that will use a lock file to prevent duplicate writes.
- *
- * By default, the file will be overwritten, but this may be changed to append.
- * The lock directory may be specified, but defaults to the system property
- * java.io.tmpdir
.
- * The encoding may also be specified, and defaults to the platform default.
- *
- * @author Scott Sanders
- * @author Michael Salmon
- * @author Jon S. Stevens
- * @author Daniel Rall
- * @author Stephen Colebourne
- * @author Andy Lehane
- * @version $Id: LockableFileWriter.java 610010 2008-01-08 14:50:59Z niallp $
- */
-public class LockableFileWriter extends Writer {
- // Cannot extend ProxyWriter, as requires writer to be
- // known when super() is called
-
- /** The extension for the lock file. */
- private static final String LCK = ".lck";
-
- /** The writer to decorate. */
- private final Writer out;
- /** The lock file. */
- private final File lockFile;
-
- /**
- * Constructs a LockableFileWriter.
- * If the file exists, it is overwritten.
- *
- * @param fileName the file to write to, not null
- * @throws NullPointerException if the file is null
- * @throws IOException in case of an I/O error
- */
- public LockableFileWriter(String fileName) throws IOException {
- this(fileName, false, null);
- }
-
- /**
- * Constructs a LockableFileWriter.
- *
- * @param fileName file to write to, not null
- * @param append true if content should be appended, false to overwrite
- * @throws NullPointerException if the file is null
- * @throws IOException in case of an I/O error
- */
- public LockableFileWriter(String fileName, boolean append) throws IOException {
- this(fileName, append, null);
- }
-
- /**
- * Constructs a LockableFileWriter.
- *
- * @param fileName the file to write to, not null
- * @param append true if content should be appended, false to overwrite
- * @param lockDir the directory in which the lock file should be held
- * @throws NullPointerException if the file is null
- * @throws IOException in case of an I/O error
- */
- public LockableFileWriter(String fileName, boolean append, String lockDir) throws IOException {
- this(new File(fileName), append, lockDir);
- }
-
- /**
- * Constructs a LockableFileWriter.
- * If the file exists, it is overwritten.
- *
- * @param file the file to write to, not null
- * @throws NullPointerException if the file is null
- * @throws IOException in case of an I/O error
- */
- public LockableFileWriter(File file) throws IOException {
- this(file, false, null);
- }
-
- /**
- * Constructs a LockableFileWriter.
- *
- * @param file the file to write to, not null
- * @param append true if content should be appended, false to overwrite
- * @throws NullPointerException if the file is null
- * @throws IOException in case of an I/O error
- */
- public LockableFileWriter(File file, boolean append) throws IOException {
- this(file, append, null);
- }
-
- /**
- * Constructs a LockableFileWriter.
- *
- * @param file the file to write to, not null
- * @param append true if content should be appended, false to overwrite
- * @param lockDir the directory in which the lock file should be held
- * @throws NullPointerException if the file is null
- * @throws IOException in case of an I/O error
- */
- public LockableFileWriter(File file, boolean append, String lockDir) throws IOException {
- this(file, null, append, lockDir);
- }
-
- /**
- * Constructs a LockableFileWriter with a file encoding.
- *
- * @param file the file to write to, not null
- * @param encoding the encoding to use, null means platform default
- * @throws NullPointerException if the file is null
- * @throws IOException in case of an I/O error
- */
- public LockableFileWriter(File file, String encoding) throws IOException {
- this(file, encoding, false, null);
- }
-
- /**
- * Constructs a LockableFileWriter with a file encoding.
- *
- * @param file the file to write to, not null
- * @param encoding the encoding to use, null means platform default
- * @param append true if content should be appended, false to overwrite
- * @param lockDir the directory in which the lock file should be held
- * @throws NullPointerException if the file is null
- * @throws IOException in case of an I/O error
- */
- public LockableFileWriter(File file, String encoding, boolean append,
- String lockDir) throws IOException {
- super();
- // init file to create/append
- file = file.getAbsoluteFile();
- if (file.getParentFile() != null) {
- FileUtils.forceMkdir(file.getParentFile());
- }
- if (file.isDirectory()) {
- throw new IOException("File specified is a directory");
- }
-
- // init lock file
- if (lockDir == null) {
- lockDir = System.getProperty("java.io.tmpdir");
- }
- File lockDirFile = new File(lockDir);
- FileUtils.forceMkdir(lockDirFile);
- testLockDir(lockDirFile);
- lockFile = new File(lockDirFile, file.getName() + LCK);
-
- // check if locked
- createLock();
-
- // init wrapped writer
- out = initWriter(file, encoding, append);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Tests that we can write to the lock directory.
- *
- * @param lockDir the File representing the lock directory
- * @throws IOException if we cannot write to the lock directory
- * @throws IOException if we cannot find the lock file
- */
- private void testLockDir(File lockDir) throws IOException {
- if (!lockDir.exists()) {
- throw new IOException(
- "Could not find lockDir: " + lockDir.getAbsolutePath());
- }
- if (!lockDir.canWrite()) {
- throw new IOException(
- "Could not write to lockDir: " + lockDir.getAbsolutePath());
- }
- }
-
- /**
- * Creates the lock file.
- *
- * @throws IOException if we cannot create the file
- */
- private void createLock() throws IOException {
- synchronized (LockableFileWriter.class) {
- if (!lockFile.createNewFile()) {
- throw new IOException("Can't write file, lock " +
- lockFile.getAbsolutePath() + " exists");
- }
- lockFile.deleteOnExit();
- }
- }
-
- /**
- * Initialise the wrapped file writer.
- * Ensure that a cleanup occurs if the writer creation fails.
- *
- * @param file the file to be accessed
- * @param encoding the encoding to use
- * @param append true to append
- * @return The initialised writer
- * @throws IOException if an error occurs
- */
- private Writer initWriter(File file, String encoding, boolean append) throws IOException {
- boolean fileExistedAlready = file.exists();
- OutputStream stream = null;
- Writer writer = null;
- try {
- if (encoding == null) {
- writer = new FileWriter(file.getAbsolutePath(), append);
- } else {
- stream = new FileOutputStream(file.getAbsolutePath(), append);
- writer = new OutputStreamWriter(stream, encoding);
- }
- } catch (IOException ex) {
- IOUtils.closeQuietly(writer);
- IOUtils.closeQuietly(stream);
- lockFile.delete();
- if (fileExistedAlready == false) {
- file.delete();
- }
- throw ex;
- } catch (RuntimeException ex) {
- IOUtils.closeQuietly(writer);
- IOUtils.closeQuietly(stream);
- lockFile.delete();
- if (fileExistedAlready == false) {
- file.delete();
- }
- throw ex;
- }
- return writer;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Closes the file writer.
- *
- * @throws IOException if an I/O error occurs
- */
- public void close() throws IOException {
- try {
- out.close();
- } finally {
- lockFile.delete();
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * Write a character.
- * @param idx the character to write
- * @throws IOException if an I/O error occurs
- */
- public void write(int idx) throws IOException {
- out.write(idx);
- }
-
- /**
- * Write the characters from an array.
- * @param chr the characters to write
- * @throws IOException if an I/O error occurs
- */
- public void write(char[] chr) throws IOException {
- out.write(chr);
- }
-
- /**
- * Write the specified characters from an array.
- * @param chr the characters to write
- * @param st The start offset
- * @param end The number of characters to write
- * @throws IOException if an I/O error occurs
- */
- public void write(char[] chr, int st, int end) throws IOException {
- out.write(chr, st, end);
- }
-
- /**
- * Write the characters from a string.
- * @param str the string to write
- * @throws IOException if an I/O error occurs
- */
- public void write(String str) throws IOException {
- out.write(str);
- }
-
- /**
- * Write the specified characters from a string.
- * @param str the string to write
- * @param st The start offset
- * @param end The number of characters to write
- * @throws IOException if an I/O error occurs
- */
- public void write(String str, int st, int end) throws IOException {
- out.write(str, st, end);
- }
-
- /**
- * Flush the stream.
- * @throws IOException if an I/O error occurs
- */
- public void flush() throws IOException {
- out.flush();
- }
-
-}
diff --git a/src/org/apache/commons/io/output/NullOutputStream.java b/src/org/apache/commons/io/output/NullOutputStream.java
deleted file mode 100644
index 7e3cdaf2c..000000000
--- a/src/org/apache/commons/io/output/NullOutputStream.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * This OutputStream writes all data to the famous /dev/null.
- *
- * This output stream has no destination (file/socket etc.) and all
- * bytes written to it are ignored and lost.
- *
- * @author Jeremias Maerki
- * @version $Id: NullOutputStream.java 610010 2008-01-08 14:50:59Z niallp $
- */
-public class NullOutputStream extends OutputStream {
-
- /**
- * A singleton.
- */
- public static final NullOutputStream NULL_OUTPUT_STREAM = new NullOutputStream();
-
- /**
- * Does nothing - output to /dev/null
.
- * @param b The bytes to write
- * @param off The start offset
- * @param len The number of bytes to write
- */
- public void write(byte[] b, int off, int len) {
- //to /dev/null
- }
-
- /**
- * Does nothing - output to /dev/null
.
- * @param b The byte to write
- */
- public void write(int b) {
- //to /dev/null
- }
-
- /**
- * Does nothing - output to /dev/null
.
- * @param b The bytes to write
- * @throws IOException never
- */
- public void write(byte[] b) throws IOException {
- //to /dev/null
- }
-
-}
diff --git a/src/org/apache/commons/io/output/NullWriter.java b/src/org/apache/commons/io/output/NullWriter.java
deleted file mode 100644
index aed52aba8..000000000
--- a/src/org/apache/commons/io/output/NullWriter.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.Writer;
-
-/**
- * This {@link Writer} writes all data to the famous /dev/null.
- *
- * This Writer
has no destination (file/socket etc.) and all
- * characters written to it are ignored and lost.
- *
- * @version $Id: NullWriter.java 610010 2008-01-08 14:50:59Z niallp $
- */
-public class NullWriter extends Writer {
-
- /**
- * A singleton.
- */
- public static final NullWriter NULL_WRITER = new NullWriter();
-
- /**
- * Constructs a new NullWriter.
- */
- public NullWriter() {
- }
-
- /**
- * Does nothing - output to /dev/null
.
- * @param idx The character to write
- */
- public void write(int idx) {
- //to /dev/null
- }
-
- /**
- * Does nothing - output to /dev/null
.
- * @param chr The characters to write
- */
- public void write(char[] chr) {
- //to /dev/null
- }
-
- /**
- * Does nothing - output to /dev/null
.
- * @param chr The characters to write
- * @param st The start offset
- * @param end The number of characters to write
- */
- public void write(char[] chr, int st, int end) {
- //to /dev/null
- }
-
- /**
- * Does nothing - output to /dev/null
.
- * @param str The string to write
- */
- public void write(String str) {
- //to /dev/null
- }
-
- /**
- * Does nothing - output to /dev/null
.
- * @param str The string to write
- * @param st The start offset
- * @param end The number of characters to write
- */
- public void write(String str, int st, int end) {
- //to /dev/null
- }
-
- /** @see java.io.Writer#flush() */
- public void flush() {
- //to /dev/null
- }
-
- /** @see java.io.Writer#close() */
- public void close() {
- //to /dev/null
- }
-
-}
diff --git a/src/org/apache/commons/io/output/ProxyOutputStream.java b/src/org/apache/commons/io/output/ProxyOutputStream.java
deleted file mode 100644
index b63d72317..000000000
--- a/src/org/apache/commons/io/output/ProxyOutputStream.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * A Proxy stream which acts as expected, that is it passes the method
- * calls on to the proxied stream and doesn't change which methods are
- * being called. It is an alternative base class to FilterOutputStream
- * to increase reusability.
- *
- * @author Stephen Colebourne
- * @version $Id: ProxyOutputStream.java 610010 2008-01-08 14:50:59Z niallp $
- */
-public class ProxyOutputStream extends FilterOutputStream {
-
- /**
- * Constructs a new ProxyOutputStream.
- *
- * @param proxy the OutputStream to delegate to
- */
- public ProxyOutputStream(OutputStream proxy) {
- super(proxy);
- // the proxy is stored in a protected superclass variable named 'out'
- }
-
- /**
- * Invokes the delegate's write(int)
method.
- * @param idx the byte to write
- * @throws IOException if an I/O error occurs
- */
- public void write(int idx) throws IOException {
- out.write(idx);
- }
-
- /**
- * Invokes the delegate's write(byte[])
method.
- * @param bts the bytes to write
- * @throws IOException if an I/O error occurs
- */
- public void write(byte[] bts) throws IOException {
- out.write(bts);
- }
-
- /**
- * Invokes the delegate's write(byte[])
method.
- * @param bts the bytes to write
- * @param st The start offset
- * @param end The number of bytes to write
- * @throws IOException if an I/O error occurs
- */
- public void write(byte[] bts, int st, int end) throws IOException {
- out.write(bts, st, end);
- }
-
- /**
- * Invokes the delegate's flush()
method.
- * @throws IOException if an I/O error occurs
- */
- public void flush() throws IOException {
- out.flush();
- }
-
- /**
- * Invokes the delegate's close()
method.
- * @throws IOException if an I/O error occurs
- */
- public void close() throws IOException {
- out.close();
- }
-
-}
diff --git a/src/org/apache/commons/io/output/ProxyWriter.java b/src/org/apache/commons/io/output/ProxyWriter.java
deleted file mode 100644
index fbec62885..000000000
--- a/src/org/apache/commons/io/output/ProxyWriter.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.FilterWriter;
-import java.io.IOException;
-import java.io.Writer;
-
-/**
- * A Proxy stream which acts as expected, that is it passes the method
- * calls on to the proxied stream and doesn't change which methods are
- * being called. It is an alternative base class to FilterWriter
- * to increase reusability, because FilterWriter changes the
- * methods being called, such as write(char[]) to write(char[], int, int)
- * and write(String) to write(String, int, int).
- *
- * @author Stephen Colebourne
- * @version $Id: ProxyWriter.java 610010 2008-01-08 14:50:59Z niallp $
- */
-public class ProxyWriter extends FilterWriter {
-
- /**
- * Constructs a new ProxyWriter.
- *
- * @param proxy the Writer to delegate to
- */
- public ProxyWriter(Writer proxy) {
- super(proxy);
- // the proxy is stored in a protected superclass variable named 'out'
- }
-
- /**
- * Invokes the delegate's write(int)
method.
- * @param idx the character to write
- * @throws IOException if an I/O error occurs
- */
- public void write(int idx) throws IOException {
- out.write(idx);
- }
-
- /**
- * Invokes the delegate's write(char[])
method.
- * @param chr the characters to write
- * @throws IOException if an I/O error occurs
- */
- public void write(char[] chr) throws IOException {
- out.write(chr);
- }
-
- /**
- * Invokes the delegate's write(char[], int, int)
method.
- * @param chr the characters to write
- * @param st The start offset
- * @param end The number of characters to write
- * @throws IOException if an I/O error occurs
- */
- public void write(char[] chr, int st, int end) throws IOException {
- out.write(chr, st, end);
- }
-
- /**
- * Invokes the delegate's write(String)
method.
- * @param str the string to write
- * @throws IOException if an I/O error occurs
- */
- public void write(String str) throws IOException {
- out.write(str);
- }
-
- /**
- * Invokes the delegate's write(String)
method.
- * @param str the string to write
- * @param st The start offset
- * @param end The number of characters to write
- * @throws IOException if an I/O error occurs
- */
- public void write(String str, int st, int end) throws IOException {
- out.write(str, st, end);
- }
-
- /**
- * Invokes the delegate's flush()
method.
- * @throws IOException if an I/O error occurs
- */
- public void flush() throws IOException {
- out.flush();
- }
-
- /**
- * Invokes the delegate's close()
method.
- * @throws IOException if an I/O error occurs
- */
- public void close() throws IOException {
- out.close();
- }
-
-}
diff --git a/src/org/apache/commons/io/output/TeeOutputStream.java b/src/org/apache/commons/io/output/TeeOutputStream.java
deleted file mode 100644
index ee957fb3b..000000000
--- a/src/org/apache/commons/io/output/TeeOutputStream.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-/**
- * Classic splitter of OutputStream. Named after the unix 'tee'
- * command. It allows a stream to be branched off so there
- * are now two streams.
- *
- * @version $Id: TeeOutputStream.java 610010 2008-01-08 14:50:59Z niallp $
- */
-public class TeeOutputStream extends ProxyOutputStream {
-
- /** the second OutputStream to write to */
- protected OutputStream branch;
-
- /**
- * Constructs a TeeOutputStream.
- * @param out the main OutputStream
- * @param branch the second OutputStream
- */
- public TeeOutputStream( OutputStream out, OutputStream branch ) {
- super(out);
- this.branch = branch;
- }
-
- /**
- * Write the bytes to both streams.
- * @param b the bytes to write
- * @throws IOException if an I/O error occurs
- */
- public synchronized void write(byte[] b) throws IOException {
- super.write(b);
- this.branch.write(b);
- }
-
- /**
- * Write the specified bytes to both streams.
- * @param b the bytes to write
- * @param off The start offset
- * @param len The number of bytes to write
- * @throws IOException if an I/O error occurs
- */
- public synchronized void write(byte[] b, int off, int len) throws IOException {
- super.write(b, off, len);
- this.branch.write(b, off, len);
- }
-
- /**
- * Write a byte to both streams.
- * @param b the byte to write
- * @throws IOException if an I/O error occurs
- */
- public synchronized void write(int b) throws IOException {
- super.write(b);
- this.branch.write(b);
- }
-
- /**
- * Flushes both streams.
- * @throws IOException if an I/O error occurs
- */
- public void flush() throws IOException {
- super.flush();
- this.branch.flush();
- }
-
- /**
- * Closes both streams.
- * @throws IOException if an I/O error occurs
- */
- public void close() throws IOException {
- super.close();
- this.branch.close();
- }
-
-}
diff --git a/src/org/apache/commons/io/output/ThresholdingOutputStream.java b/src/org/apache/commons/io/output/ThresholdingOutputStream.java
deleted file mode 100644
index fa69a804c..000000000
--- a/src/org/apache/commons/io/output/ThresholdingOutputStream.java
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.io.output;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-
-/**
- * An output stream which triggers an event when a specified number of bytes of
- * data have been written to it. The event can be used, for example, to throw
- * an exception if a maximum has been reached, or to switch the underlying
- * stream type when the threshold is exceeded.
- *
- * This class overrides all OutputStream
methods. However, these
- * overrides ultimately call the corresponding methods in the underlying output
- * stream implementation.
- *
- * NOTE: This implementation may trigger the event before the threshold
- * is actually reached, since it triggers when a pending write operation would
- * cause the threshold to be exceeded.
- *
- * @author Martin Cooper
- *
- * @version $Id: ThresholdingOutputStream.java 540714 2007-05-22 19:39:44Z niallp $
- */
-public abstract class ThresholdingOutputStream
- extends OutputStream
-{
-
- // ----------------------------------------------------------- Data members
-
-
- /**
- * The threshold at which the event will be triggered.
- */
- private int threshold;
-
-
- /**
- * The number of bytes written to the output stream.
- */
- private long written;
-
-
- /**
- * Whether or not the configured threshold has been exceeded.
- */
- private boolean thresholdExceeded;
-
-
- // ----------------------------------------------------------- Constructors
-
-
- /**
- * Constructs an instance of this class which will trigger an event at the
- * specified threshold.
- *
- * @param threshold The number of bytes at which to trigger an event.
- */
- public ThresholdingOutputStream(int threshold)
- {
- this.threshold = threshold;
- }
-
-
- // --------------------------------------------------- OutputStream methods
-
-
- /**
- * Writes the specified byte to this output stream.
- *
- * @param b The byte to be written.
- *
- * @exception IOException if an error occurs.
- */
- public void write(int b) throws IOException
- {
- checkThreshold(1);
- getStream().write(b);
- written++;
- }
-
-
- /**
- * Writes b.length
bytes from the specified byte array to this
- * output stream.
- *
- * @param b The array of bytes to be written.
- *
- * @exception IOException if an error occurs.
- */
- public void write(byte b[]) throws IOException
- {
- checkThreshold(b.length);
- getStream().write(b);
- written += b.length;
- }
-
-
- /**
- * Writes len
bytes from the specified byte array starting at
- * offset off
to this output stream.
- *
- * @param b The byte array from which the data will be written.
- * @param off The start offset in the byte array.
- * @param len The number of bytes to write.
- *
- * @exception IOException if an error occurs.
- */
- public void write(byte b[], int off, int len) throws IOException
- {
- checkThreshold(len);
- getStream().write(b, off, len);
- written += len;
- }
-
-
- /**
- * Flushes this output stream and forces any buffered output bytes to be
- * written out.
- *
- * @exception IOException if an error occurs.
- */
- public void flush() throws IOException
- {
- getStream().flush();
- }
-
-
- /**
- * Closes this output stream and releases any system resources associated
- * with this stream.
- *
- * @exception IOException if an error occurs.
- */
- public void close() throws IOException
- {
- try
- {
- flush();
- }
- catch (IOException ignored)
- {
- // ignore
- }
- getStream().close();
- }
-
-
- // --------------------------------------------------------- Public methods
-
-
- /**
- * Returns the threshold, in bytes, at which an event will be triggered.
- *
- * @return The threshold point, in bytes.
- */
- public int getThreshold()
- {
- return threshold;
- }
-
-
- /**
- * Returns the number of bytes that have been written to this output stream.
- *
- * @return The number of bytes written.
- */
- public long getByteCount()
- {
- return written;
- }
-
-
- /**
- * Determines whether or not the configured threshold has been exceeded for
- * this output stream.
- *
- * @return true
if the threshold has been reached;
- * false
otherwise.
- */
- public boolean isThresholdExceeded()
- {
- return (written > threshold);
- }
-
-
- // ------------------------------------------------------ Protected methods
-
-
- /**
- * Checks to see if writing the specified number of bytes would cause the
- * configured threshold to be exceeded. If so, triggers an event to allow
- * a concrete implementation to take action on this.
- *
- * @param count The number of bytes about to be written to the underlying
- * output stream.
- *
- * @exception IOException if an error occurs.
- */
- protected void checkThreshold(int count) throws IOException
- {
- if (!thresholdExceeded && (written + count > threshold))
- {
- thresholdExceeded = true;
- thresholdReached();
- }
- }
-
- /**
- * Resets the byteCount to zero. You can call this from
- * {@link #thresholdReached()} if you want the event to be triggered again.
- */
- protected void resetByteCount()
- {
- this.thresholdExceeded = false;
- this.written = 0;
- }
-
- // ------------------------------------------------------- Abstract methods
-
-
- /**
- * Returns the underlying output stream, to which the corresponding
- * OutputStream
methods in this class will ultimately delegate.
- *
- * @return The underlying output stream.
- *
- * @exception IOException if an error occurs.
- */
- protected abstract OutputStream getStream() throws IOException;
-
-
- /**
- * Indicates that the configured threshold has been reached, and that a
- * subclass should take whatever action necessary on this event. This may
- * include changing the underlying output stream.
- *
- * @exception IOException if an error occurs.
- */
- protected abstract void thresholdReached() throws IOException;
-}
diff --git a/src/org/apache/commons/io/output/package.html b/src/org/apache/commons/io/output/package.html
deleted file mode 100644
index db2cbce59..000000000
--- a/src/org/apache/commons/io/output/package.html
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
-This package provides implementations of output classes, such as
-OutputStream
and Writer
.
-
-
-
diff --git a/src/org/apache/commons/io/overview.html b/src/org/apache/commons/io/overview.html
deleted file mode 100644
index 31311b5e9..000000000
--- a/src/org/apache/commons/io/overview.html
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-The commons-io component contains utility classes,
-filters, streams, readers and writers.
-
-
-These classes aim to add to the standard JDK IO classes.
-The utilities provide convenience wrappers around the JDK, simplifying
-various operations into pre-tested units of code.
-The filters and streams provide useful implementations that perhaps should
-be in the JDK itself.
-
-
-
diff --git a/src/org/apache/commons/io/package.html b/src/org/apache/commons/io/package.html
deleted file mode 100644
index e5ba9b0aa..000000000
--- a/src/org/apache/commons/io/package.html
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-This package defines utility classes for working with streams, readers,
-writers and files. The most commonly used classes are described here:
-
-
-IOUtils is the most frequently used class.
-It provides operations to read, write, copy and close streams.
-
-
-FileUtils provides operations based around the JDK File class.
-These include reading, writing, copying, comparing and deleting.
-
-
-FilenameUtils provides utilities based on filenames.
-This utility class manipulates filenames without using File objects.
-It aims to simplify the transition between Windows and Unix.
-Before using this class however, you should consider whether you should
-be using File objects.
-
-
-FileSystemUtils allows access to the filing system in ways the JDK
-does not support. At present this allows you to get the free space on a drive.
-
-
-EndianUtils swaps data between Big-Endian and Little-Endian formats.
-
-
-
diff --git a/src/org/apache/james/mime4j/AbstractContentHandler.java b/src/org/apache/james/mime4j/AbstractContentHandler.java
deleted file mode 100644
index 06c9b90a0..000000000
--- a/src/org/apache/james/mime4j/AbstractContentHandler.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * Abstract ContentHandler
with default implementations of all
- * the methods of the ContentHandler
interface.
- *
- * The default is to todo nothing.
- *
- *
- * @version $Id: AbstractContentHandler.java,v 1.3 2004/10/02 12:41:10 ntherning Exp $
- */
-public abstract class AbstractContentHandler implements ContentHandler {
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#endMultipart()
- */
- public void endMultipart() {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#startMultipart(org.apache.james.mime4j.BodyDescriptor)
- */
- public void startMultipart(BodyDescriptor bd) {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#body(org.apache.james.mime4j.BodyDescriptor, java.io.InputStream)
- */
- public void body(BodyDescriptor bd, InputStream is) throws IOException {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#endBodyPart()
- */
- public void endBodyPart() {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#endHeader()
- */
- public void endHeader() {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#endMessage()
- */
- public void endMessage() {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#epilogue(java.io.InputStream)
- */
- public void epilogue(InputStream is) throws IOException {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#field(java.lang.String)
- */
- public void field(String fieldData) {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#preamble(java.io.InputStream)
- */
- public void preamble(InputStream is) throws IOException {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#startBodyPart()
- */
- public void startBodyPart() {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#startHeader()
- */
- public void startHeader() {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#startMessage()
- */
- public void startMessage() {
- }
-
- /**
- * @see org.apache.james.mime4j.ContentHandler#raw(java.io.InputStream)
- */
- public void raw(InputStream is) throws IOException {
- }
-}
diff --git a/src/org/apache/james/mime4j/BodyDescriptor.java b/src/org/apache/james/mime4j/BodyDescriptor.java
deleted file mode 100644
index 515658a8d..000000000
--- a/src/org/apache/james/mime4j/BodyDescriptor.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Encapsulates the values of the MIME-specific header fields
- * (which starts with Content-
).
- *
- *
- * @version $Id: BodyDescriptor.java,v 1.4 2005/02/11 10:08:37 ntherning Exp $
- */
-public class BodyDescriptor {
- private static Log log = LogFactory.getLog(BodyDescriptor.class);
-
- private String mimeType = "text/plain";
- private String boundary = null;
- private String charset = "us-ascii";
- private String transferEncoding = "7bit";
- private Map parameters = new HashMap();
- private boolean contentTypeSet = false;
- private boolean contentTransferEncSet = false;
-
- /**
- * Creates a new root BodyDescriptor
instance.
- */
- public BodyDescriptor() {
- this(null);
- }
-
- /**
- * Creates a new BodyDescriptor
instance.
- *
- * @param parent the descriptor of the parent or null
if this
- * is the root descriptor.
- */
- public BodyDescriptor(BodyDescriptor parent) {
- if (parent != null && parent.isMimeType("multipart/digest")) {
- mimeType = "message/rfc822";
- } else {
- mimeType = "text/plain";
- }
- }
-
- /**
- * Should be called for each Content-
header field of
- * a MIME message or part.
- *
- * @param name the field name.
- * @param value the field value.
- */
- public void addField(String name, String value) {
-
- name = name.trim().toLowerCase();
-
- if (name.equals("content-transfer-encoding") && !contentTransferEncSet) {
- contentTransferEncSet = true;
-
- value = value.trim().toLowerCase();
- if (value.length() > 0) {
- transferEncoding = value;
- }
-
- } else if (name.equals("content-type") && !contentTypeSet) {
- contentTypeSet = true;
-
- value = value.trim();
-
- /*
- * Unfold Content-Type value
- */
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < value.length(); i++) {
- char c = value.charAt(i);
- if (c == '\r' || c == '\n') {
- continue;
- }
- sb.append(c);
- }
-
- Map params = getHeaderParams(sb.toString());
-
- String main = (String) params.get("");
- if (main != null) {
- main = main.toLowerCase().trim();
- int index = main.indexOf('/');
- boolean valid = false;
- if (index != -1) {
- String type = main.substring(0, index).trim();
- String subtype = main.substring(index + 1).trim();
- if (type.length() > 0 && subtype.length() > 0) {
- main = type + "/" + subtype;
- valid = true;
- }
- }
-
- if (!valid) {
- main = null;
- }
- }
- String b = (String) params.get("boundary");
-
- if (main != null
- && ((main.startsWith("multipart/") && b != null)
- || !main.startsWith("multipart/"))) {
-
- mimeType = main;
- }
-
- if (isMultipart()) {
- boundary = b;
- }
-
- String c = (String) params.get("charset");
- if (c != null) {
- c = c.trim();
- if (c.length() > 0) {
- charset = c.toLowerCase();
- }
- }
-
- /*
- * Add all other parameters to parameters.
- */
- parameters.putAll(params);
- parameters.remove("");
- parameters.remove("boundary");
- parameters.remove("charset");
- }
- }
-
- private Map getHeaderParams(String headerValue) {
- Map result = new HashMap();
-
- // split main value and parameters
- String main;
- String rest;
- if (headerValue.indexOf(";") == -1) {
- main = headerValue;
- rest = null;
- } else {
- main = headerValue.substring(0, headerValue.indexOf(";"));
- rest = headerValue.substring(main.length() + 1);
- }
-
- result.put("", main);
- if (rest != null) {
- char[] chars = rest.toCharArray();
- StringBuffer paramName = new StringBuffer();
- StringBuffer paramValue = new StringBuffer();
-
- final byte READY_FOR_NAME = 0;
- final byte IN_NAME = 1;
- final byte READY_FOR_VALUE = 2;
- final byte IN_VALUE = 3;
- final byte IN_QUOTED_VALUE = 4;
- final byte VALUE_DONE = 5;
- final byte ERROR = 99;
-
- byte state = READY_FOR_NAME;
- boolean escaped = false;
- for (int i = 0; i < chars.length; i++) {
- char c = chars[i];
-
- switch (state) {
- case ERROR:
- if (c == ';')
- state = READY_FOR_NAME;
- break;
-
- case READY_FOR_NAME:
- if (c == '=') {
- log.error("Expected header param name, got '='");
- state = ERROR;
- break;
- }
-
- paramName = new StringBuffer();
- paramValue = new StringBuffer();
-
- state = IN_NAME;
- // fall-through
-
- case IN_NAME:
- if (c == '=') {
- if (paramName.length() == 0)
- state = ERROR;
- else
- state = READY_FOR_VALUE;
- break;
- }
-
- // not '='... just add to name
- paramName.append(c);
- break;
-
- case READY_FOR_VALUE:
- boolean fallThrough = false;
- switch (c) {
- case ' ':
- case '\t':
- break; // ignore spaces, especially before '"'
-
- case '"':
- state = IN_QUOTED_VALUE;
- break;
-
- default:
- state = IN_VALUE;
- fallThrough = true;
- break;
- }
- if (!fallThrough)
- break;
-
- // fall-through
-
- case IN_VALUE:
- fallThrough = false;
- switch (c) {
- case ';':
- case ' ':
- case '\t':
- result.put(
- paramName.toString().trim().toLowerCase(),
- paramValue.toString().trim());
- state = VALUE_DONE;
- fallThrough = true;
- break;
- default:
- paramValue.append(c);
- break;
- }
- if (!fallThrough)
- break;
-
- case VALUE_DONE:
- switch (c) {
- case ';':
- state = READY_FOR_NAME;
- break;
-
- case ' ':
- case '\t':
- break;
-
- default:
- state = ERROR;
- break;
- }
- break;
-
- case IN_QUOTED_VALUE:
- switch (c) {
- case '"':
- if (!escaped) {
- // don't trim quoted strings; the spaces could be intentional.
- result.put(
- paramName.toString().trim().toLowerCase(),
- paramValue.toString());
- state = VALUE_DONE;
- } else {
- escaped = false;
- paramValue.append(c);
- }
- break;
-
- case '\\':
- if (escaped) {
- paramValue.append('\\');
- }
- escaped = !escaped;
- break;
-
- default:
- if (escaped) {
- paramValue.append('\\');
- }
- escaped = false;
- paramValue.append(c);
- break;
- }
- break;
-
- }
- }
-
- // done looping. check if anything is left over.
- if (state == IN_VALUE) {
- result.put(
- paramName.toString().trim().toLowerCase(),
- paramValue.toString().trim());
- }
- }
-
- return result;
- }
-
-
- public boolean isMimeType(String mimeType) {
- return this.mimeType.equals(mimeType.toLowerCase());
- }
-
- /**
- * Return true if the BodyDescriptor belongs to a message
- *
- * @return
- */
- public boolean isMessage() {
- return mimeType.equals("message/rfc822");
- }
-
- /**
- * Retrun true if the BodyDescripotro belogns to a multipart
- *
- * @return
- */
- public boolean isMultipart() {
- return mimeType.startsWith("multipart/");
- }
-
- /**
- * Return the MimeType
- *
- * @return mimeType
- */
- public String getMimeType() {
- return mimeType;
- }
-
- /**
- * Return the boundary
- *
- * @return boundary
- */
- public String getBoundary() {
- return boundary;
- }
-
- /**
- * Return the charset
- *
- * @return charset
- */
- public String getCharset() {
- return charset;
- }
-
- /**
- * Return all parameters for the BodyDescriptor
- *
- * @return parameters
- */
- public Map getParameters() {
- return parameters;
- }
-
- /**
- * Return the TransferEncoding
- *
- * @return transferEncoding
- */
- public String getTransferEncoding() {
- return transferEncoding;
- }
-
- /**
- * Return true if it's base64 encoded
- *
- * @return
- *
- */
- public boolean isBase64Encoded() {
- return "base64".equals(transferEncoding);
- }
-
- /**
- * Return true if it's quoted-printable
- * @return
- */
- public boolean isQuotedPrintableEncoded() {
- return "quoted-printable".equals(transferEncoding);
- }
-
- public String toString() {
- return mimeType;
- }
-}
diff --git a/src/org/apache/james/mime4j/CloseShieldInputStream.java b/src/org/apache/james/mime4j/CloseShieldInputStream.java
deleted file mode 100644
index 94995d110..000000000
--- a/src/org/apache/james/mime4j/CloseShieldInputStream.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-/**
- * InputStream that shields its underlying input stream from
- * being closed.
- *
- *
- * @version $Id: CloseShieldInputStream.java,v 1.2 2004/10/02 12:41:10 ntherning Exp $
- */
-public class CloseShieldInputStream extends InputStream {
-
- /**
- * Underlying InputStream
- */
- private InputStream is;
-
- public CloseShieldInputStream(InputStream is) {
- this.is = is;
- }
-
- public InputStream getUnderlyingStream() {
- return is;
- }
-
- /**
- * @see java.io.InputStream#read()
- */
- public int read() throws IOException {
- checkIfClosed();
- return is.read();
- }
-
- /**
- * @see java.io.InputStream#available()
- */
- public int available() throws IOException {
- checkIfClosed();
- return is.available();
- }
-
-
- /**
- * Set the underlying InputStream to null
- */
- public void close() throws IOException {
- is = null;
- }
-
- /**
- * @see java.io.FilterInputStream#reset()
- */
- public synchronized void reset() throws IOException {
- checkIfClosed();
- is.reset();
- }
-
- /**
- * @see java.io.FilterInputStream#markSupported()
- */
- public boolean markSupported() {
- if (is == null)
- return false;
- return is.markSupported();
- }
-
- /**
- * @see java.io.FilterInputStream#mark(int)
- */
- public synchronized void mark(int readlimit) {
- if (is != null)
- is.mark(readlimit);
- }
-
- /**
- * @see java.io.FilterInputStream#skip(long)
- */
- public long skip(long n) throws IOException {
- checkIfClosed();
- return is.skip(n);
- }
-
- /**
- * @see java.io.FilterInputStream#read(byte[])
- */
- public int read(byte b[]) throws IOException {
- checkIfClosed();
- return is.read(b);
- }
-
- /**
- * @see java.io.FilterInputStream#read(byte[], int, int)
- */
- public int read(byte b[], int off, int len) throws IOException {
- checkIfClosed();
- return is.read(b, off, len);
- }
-
- /**
- * Check if the underlying InputStream is null. If so throw an Exception
- *
- * @throws IOException if the underlying InputStream is null
- */
- private void checkIfClosed() throws IOException {
- if (is == null)
- throw new IOException("Stream is closed");
- }
-}
diff --git a/src/org/apache/james/mime4j/ContentHandler.java b/src/org/apache/james/mime4j/ContentHandler.java
deleted file mode 100644
index 946c89401..000000000
--- a/src/org/apache/james/mime4j/ContentHandler.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one *
- * or more contributor license agreements. See the NOTICE file *
- * distributed with this work for additional information *
- * regarding copyright ownership. The ASF licenses this file *
- * to you under the Apache License, Version 2.0 (the *
- * "License"); you may not use this file except in compliance *
- * with the License. You may obtain a copy of the License at *
- * *
- * http://www.apache.org/licenses/LICENSE-2.0 *
- * *
- * Unless required by applicable law or agreed to in writing, *
- * software distributed under the License is distributed on an *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
- * KIND, either express or implied. See the License for the *
- * specific language governing permissions and limitations *
- * under the License. *
- ****************************************************************/
-
-package org.apache.james.mime4j;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- *
- * Receives notifications of the content of a plain RFC822 or MIME message.
- * Implement this interface and register an instance of that implementation
- * with a MimeStreamParser
instance using its
- * {@link org.apache.james.mime4j.MimeStreamParser#setContentHandler(ContentHandler)}
- * method. The parser uses the ContentHandler
instance to report
- * basic message-related events like the start and end of the body of a
- * part in a multipart MIME entity.
- *
- *
- * Events will be generated in the order the corresponding elements occur in
- * the message stream parsed by the parser. E.g.:
- *
- * startMessage()
- * startHeader()
- * field(...)
- * field(...)
- * ...
- * endHeader()
- * startMultipart()
- * preamble(...)
- * startBodyPart()
- * startHeader()
- * field(...)
- * field(...)
- * ...
- * endHeader()
- * body()
- * endBodyPart()
- * startBodyPart()
- * startHeader()
- * field(...)
- * field(...)
- * ...
- * endHeader()
- * body()
- * endBodyPart()
- * epilogue(...)
- * endMultipart()
- * endMessage()
- *
- * The above shows an example of a MIME message consisting of a multipart
- * body containing two body parts.
- *