Author: mattf
Date: Sat Jun 4 06:50:44 2011
New Revision: 1131330
URL: http://svn.apache.org/viewvc?rev=1131330&view=rev
Log:
HADOOP-7342. Add an utility API in FileUtil for JDK File.list avoid NPEs on
File.list(). Contributed by Bharath Mundlapudi.
Modified:
hadoop/common/trunk/CHANGES.txt
hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java
hadoop/common/trunk/src/test/core/org/apache/hadoop/fs/TestFileUtil.java
Modified: hadoop/common/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/CHANGES.txt?rev=1131330&r1=1131329&r2=1131330&view=diff
==============================================================================
--- hadoop/common/trunk/CHANGES.txt (original)
+++ hadoop/common/trunk/CHANGES.txt Sat Jun 4 06:50:44 2011
@@ -12,6 +12,9 @@ Trunk (unreleased changes)
NEW FEATURES
+ HADOOP-7342. Add an utility API in FileUtil for JDK File.list
+ avoid NPEs on File.list() (Bharath Mundlapudi via mattf)
+
HADOOP-7322. Adding a util method in FileUtil for directory listing,
avoid NPEs on File.listFiles() (Bharath Mundlapudi via mattf)
Modified: hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java?rev=1131330&r1=1131329&r2=1131330&view=diff
==============================================================================
--- hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java (original)
+++ hadoop/common/trunk/src/java/org/apache/hadoop/fs/FileUtil.java Sat Jun 4
06:50:44 2011
@@ -728,4 +728,23 @@ public class FileUtil {
}
return files;
}
+
+ /**
+ * A wrapper for {@link File#list()}. This java.io API returns null
+ * when a dir is not a directory or for any I/O error. Instead of having
+ * null check everywhere File#list() is used, we will add utility API
+ * to get around this problem. For the majority of cases where we prefer
+ * an IOException to be thrown.
+ * @param dir directory for which listing should be performed
+ * @return list of file names or empty string list
+ * @exception IOException for invalid directory or for a bad disk.
+ */
+ public static String[] list(File dir) throws IOException {
+ String[] fileNames = dir.list();
+ if(fileNames == null) {
+ throw new IOException("Invalid directory or I/O error occurred for dir: "
+ + dir.toString());
+ }
+ return fileNames;
+ }
}
Modified:
hadoop/common/trunk/src/test/core/org/apache/hadoop/fs/TestFileUtil.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/src/test/core/org/apache/hadoop/fs/TestFileUtil.java?rev=1131330&r1=1131329&r2=1131330&view=diff
==============================================================================
--- hadoop/common/trunk/src/test/core/org/apache/hadoop/fs/TestFileUtil.java
(original)
+++ hadoop/common/trunk/src/test/core/org/apache/hadoop/fs/TestFileUtil.java
Sat Jun 4 06:50:44 2011
@@ -143,6 +143,33 @@ public class TestFileUtil {
//Expected an IOException
}
}
+
+ @Test
+ public void testListAPI() throws IOException {
+ setupDirs();
+ //Test existing files case
+ String[] files = FileUtil.list(partitioned);
+ Assert.assertEquals("Unexpected number of pre-existing files", 2,
files.length);
+
+ //Test existing directory with no files case
+ File newDir = new File(tmp.getPath(),"test");
+ newDir.mkdir();
+ Assert.assertTrue("Failed to create test dir", newDir.exists());
+ files = FileUtil.list(newDir);
+ Assert.assertEquals("New directory unexpectedly contains files", 0,
files.length);
+ newDir.delete();
+ Assert.assertFalse("Failed to delete test dir", newDir.exists());
+
+ //Test non-existing directory case, this throws
+ //IOException
+ try {
+ files = FileUtil.list(newDir);
+ Assert.fail("IOException expected on list() for non-existent dir "
+ + newDir.toString());
+ } catch(IOException ioe) {
+ //Expected an IOException
+ }
+ }
@After
public void tearDown() throws IOException {