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/28 23:50:08 UTC
svn commit: r490858 - 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: Thu Dec 28 14:50:07 2006
New Revision: 490858
URL: http://svn.apache.org/viewvc?view=rev&rev=490858
Log:
IO-107 - Add FileUtils.openOutputStream, creating parent directories if required
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=490858&r1=490857&r2=490858
==============================================================================
--- jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt (original)
+++ jakarta/commons/proper/io/trunk/RELEASE-NOTES.txt Thu Dec 28 14:50:07 2006
@@ -102,6 +102,9 @@
- wildcardMatch - new method that has IOCase as a parameter
- equals - new method that has IOCase as a parameter
+- FileUtils.openOutputStream [IO-107]
+ - new method to open a FileOutputStream, creating parent directories if required
+
- FileUtils.isFileOlder
- add methods to check if a file is older (i.e. isFileOlder()) - counterparts
to the existing isFileNewer() methods.
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=490858&r1=490857&r2=490858
==============================================================================
--- 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 Thu Dec 28 14:50:07 2006
@@ -107,6 +107,39 @@
//-----------------------------------------------------------------------
/**
+ * Opens a {@link FileOutputStream} for the specified file, checking and
+ * creating the parent directory if it does not exist.
+ * <p>
+ * At the end of the method either the stream will be successfully opened,
+ * or an exception will have been thrown.
+ * <p>
+ * 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 parent directory cannot be created.
+ *
+ * @param file the file to create, not null
+ * @throws IOException if the file object is a directory
+ * @throws IOException if a parent directory needs creating but that fails
+ */
+ public static FileOutputStream openOutputStream(File file) throws IOException {
+ if (file.exists()) {
+ if (file.isDirectory()) {
+ throw new IOException("File '" + file + "' exists but is a directory");
+ }
+ } else {
+ File parent = file.getParentFile();
+ if (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.
*
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=490858&r1=490857&r2=490858
==============================================================================
--- 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 Thu Dec 28 14:50:07 2006
@@ -102,8 +102,55 @@
FileUtils.deleteDirectory(getTestDirectory());
}
- // byteCountToDisplaySize
+ //-----------------------------------------------------------------------
+ public void test_openOutputStream_exists() throws Exception {
+ File file = new File(getTestDirectory(), "test.txt");
+ createLineBasedFile(file, new String[] {"Hello"});
+ FileOutputStream out = null;
+ try {
+ out = FileUtils.openOutputStream(file);
+ out.write(0);
+ } finally {
+ IOUtils.closeQuietly(out);
+ }
+ assertEquals(true, file.exists());
+ }
+
+ public void test_openOutputStream_existsButIsDirectory() throws Exception {
+ File directory = new File(getTestDirectory(), "subdir");
+ directory.mkdirs();
+ try {
+ FileUtils.openOutputStream(directory);
+ fail();
+ } catch (IOException ioe) {
+ // expected
+ }
+ }
+
+ public void test_openOutputStream_notExists() throws Exception {
+ File file = new File(getTestDirectory(), "a/test.txt");
+ FileOutputStream out = null;
+ try {
+ out = FileUtils.openOutputStream(file);
+ out.write(0);
+ } finally {
+ IOUtils.closeQuietly(out);
+ }
+ assertEquals(true, file.exists());
+ }
+ public void test_openOutputStream_notExistsCannotCreate() throws Exception {
+ File file = new File(getTestDirectory(), "a/:#$!/test.txt"); // empty path segment is bad directory name
+ try {
+ FileUtils.openOutputStream(file);
+ fail();
+ } catch (IOException ioe) {
+ // expected
+ }
+ }
+
+ //-----------------------------------------------------------------------
+ // byteCountToDisplaySize
public void testByteCountToDisplaySize() {
assertEquals(FileUtils.byteCountToDisplaySize(0), "0 bytes");
assertEquals(FileUtils.byteCountToDisplaySize(1024), "1 KB");
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org