You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2006/12/29 14:10:03 UTC
svn commit: r490997 - in /jakarta/commons/proper/io/trunk: RELEASE-NOTES.txt
src/java/org/apache/commons/io/FileUtils.java
src/test/org/apache/commons/io/FileUtilsTestCase.java
Author: scolebourne
Date: Fri Dec 29 05:10:03 2006
New Revision: 490997
URL: http://svn.apache.org/viewvc?view=rev&rev=490997
Log:
IO-107 - Add FileUtils.openInputStream, with better error messages than the JDK
Modified:
jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt
jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java
jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java
Modified: jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt?view=diff&rev=490997&r1=490996&r2=490997
==============================================================================
--- jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt (original)
+++ jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt Fri Dec 29 05:10:03 2006
@@ -110,6 +110,8 @@
- FileUtils.writeByteArrayToFile
- FileUtils.writeLines
- enhanced to create parent directories if required
+- FileUtils.openInputStream [IO-107]
+ - new method to open a FileInputStream, providing better error messages than the JDK
- FileUtils.isFileOlder
- new methods to check if a file is older (i.e. isFileOlder()) - counterparts
Modified: jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java?view=diff&rev=490997&r1=490996&r2=490997
==============================================================================
--- jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java (original)
+++ jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java Fri Dec 29 05:10:03 2006
@@ -25,6 +25,7 @@
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
+import java.nio.channels.FileChannel;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
@@ -107,6 +108,38 @@
//-----------------------------------------------------------------------
/**
+ * Opens a {@link FileInputStream} for the specified file, providing better
+ * error messages than simply calling <code>new FileInputStream(file)</code>.
+ * <p>
+ * At the end of the method either the stream will be successfully opened,
+ * or an exception will have been thrown.
+ * <p>
+ * 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, not null
+ * @throws IOException 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 IOException("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.
* <p>
@@ -119,8 +152,9 @@
* 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 create, not null
+ * @param file the file to open for output, not null
* @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
*/
@@ -918,17 +952,16 @@
* the default encoding can differ between platforms and will have
* inconsistent results.
*
- * @param file the file to read
+ * @param file the file to read, not null
* @param encoding the encoding to use, null means platform default
- * @return the file contents or null if read failed
+ * @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 {
+ public static String readFileToString(File file, String encoding) throws IOException {
InputStream in = null;
try {
- in = new FileInputStream(file);
+ in = openInputStream(file);
return IOUtils.toString(in, encoding);
} finally {
IOUtils.closeQuietly(in);
@@ -939,15 +972,15 @@
* Reads the contents of a file into a byte array.
* The file is always closed.
*
- * @param file the file to read
- * @return the file contents or null if read failed
+ * @param file the file to read, not 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 = new FileInputStream(file);
+ in = openInputStream(file);
return IOUtils.toByteArray(in);
} finally {
IOUtils.closeQuietly(in);
@@ -962,9 +995,9 @@
* the default encoding can differ between platforms and will have
* inconsistent results.
*
- * @param file the file to read
+ * @param file the file to read, not null
* @param encoding the encoding to use, null means platform default
- * @return the list of Strings representing each line in the file
+ * @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
@@ -972,7 +1005,7 @@
public static List readLines(File file, String encoding) throws IOException {
InputStream in = null;
try {
- in = new FileInputStream(file);
+ in = openInputStream(file);
return IOUtils.readLines(in, encoding);
} finally {
IOUtils.closeQuietly(in);
@@ -1008,7 +1041,7 @@
* the default encoding can differ between platforms and will have
* inconsistent results.
*
- * @param file the file to read
+ * @param file the file to read, not 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)
@@ -1017,7 +1050,7 @@
public static LineIterator lineIterator(File file, String encoding) throws IOException {
InputStream in = null;
try {
- in = new FileInputStream(file);
+ in = openInputStream(file);
return IOUtils.lineIterator(in, encoding);
} catch (IOException ex) {
IOUtils.closeQuietly(in);
@@ -1046,8 +1079,9 @@
* @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 = openOutputStream(file);
+ OutputStream out = null;
try {
+ out = openOutputStream(file);
IOUtils.write(data, out, encoding);
} finally {
IOUtils.closeQuietly(out);
@@ -1066,8 +1100,9 @@
* @since Commons IO 1.1
*/
public static void writeByteArrayToFile(File file, byte[] data) throws IOException {
- OutputStream out = openOutputStream(file);
+ OutputStream out = null;
try {
+ out = openOutputStream(file);
out.write(data);
} finally {
IOUtils.closeQuietly(out);
@@ -1118,8 +1153,9 @@
* @since Commons IO 1.1
*/
public static void writeLines(File file, String encoding, Collection lines, String lineEnding) throws IOException {
- OutputStream out = openOutputStream(file);
+ OutputStream out = null;
try {
+ out = openOutputStream(file);
IOUtils.writeLines(lines, lineEnding, out, encoding);
} finally {
IOUtils.closeQuietly(out);
Modified: jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java?view=diff&rev=490997&r1=490996&r2=490997
==============================================================================
--- jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java (original)
+++ jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FileUtilsTestCase.java Fri Dec 29 05:10:03 2006
@@ -103,6 +103,46 @@
}
//-----------------------------------------------------------------------
+ public void test_openInputStream_exists() throws Exception {
+ File file = new File(getTestDirectory(), "test.txt");
+ createLineBasedFile(file, new String[] {"Hello"});
+ FileInputStream in = null;
+ try {
+ in = FileUtils.openInputStream(file);
+ assertEquals('H', in.read());
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+ }
+
+ public void test_openInputStream_existsButIsDirectory() throws Exception {
+ File directory = new File(getTestDirectory(), "subdir");
+ directory.mkdirs();
+ FileInputStream in = null;
+ try {
+ in = FileUtils.openInputStream(directory);
+ fail();
+ } catch (IOException ioe) {
+ // expected
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+ }
+
+ public void test_openInputStream_notExists() throws Exception {
+ File directory = new File(getTestDirectory(), "test.txt");
+ FileInputStream in = null;
+ try {
+ in = FileUtils.openInputStream(directory);
+ fail();
+ } catch (IOException ioe) {
+ // expected
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
+ }
+
+ //-----------------------------------------------------------------------
public void test_openOutputStream_exists() throws Exception {
File file = new File(getTestDirectory(), "test.txt");
createLineBasedFile(file, new String[] {"Hello"});
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org