FileUtil { public static long getDU(File dir) { long size = 0; if (!dir.exists()) return 0; if (!dir.isDirectory()) { return dir.length(); } else { File[] allFiles = dir.listFiles(); if(allFiles != null) { for (int i = 0; i < allFiles.length; i++) { boolean isSymLink; try { isSymLink = org.apache.commons.io.FileUtils.isSymlink(allFiles[i]); } catch(IOException ioe) { isSymLink = true; } if(!isSymLink) { size += getDU(allFiles[i]); } } } return size; } }  static Path[] stat2Paths(FileStatus[] stats); static Path[] stat2Paths(FileStatus[] stats, Path path); static boolean fullyDelete(final File dir); static boolean fullyDelete(final File dir, boolean tryGrantPermissions); static String readLink(File f); static boolean fullyDeleteContents(final File dir); static boolean fullyDeleteContents(final File dir, final boolean tryGrantPermissions); @Deprecated static void fullyDelete(FileSystem fs, Path dir); static boolean copy(FileSystem srcFS, Path src, 
                             FileSystem dstFS, Path dst, 
                             boolean deleteSource,
                             Configuration conf); static boolean copy(FileSystem srcFS, Path[] srcs, 
                             FileSystem dstFS, Path dst,
                             boolean deleteSource, 
                             boolean overwrite, Configuration conf); static boolean copy(FileSystem srcFS, Path src, 
                             FileSystem dstFS, Path dst, 
                             boolean deleteSource,
                             boolean overwrite,
                             Configuration conf); static boolean copy(FileSystem srcFS, FileStatus srcStatus,
                             FileSystem dstFS, Path dst,
                             boolean deleteSource,
                             boolean overwrite,
                             Configuration conf); static boolean copyMerge(FileSystem srcFS, Path srcDir, 
                                  FileSystem dstFS, Path dstFile, 
                                  boolean deleteSource,
                                  Configuration conf, String addString); static boolean copy(File src,
                             FileSystem dstFS, Path dst,
                             boolean deleteSource,
                             Configuration conf); static boolean copy(FileSystem srcFS, Path src, 
                             File dst, boolean deleteSource,
                             Configuration conf); static String makeShellPath(String filename); static String makeShellPath(File file); static String makeShellPath(File file, boolean makeCanonicalPath); static long getDU(File dir); static void unZip(File inFile, File unzipDir); static void unTar(File inFile, File untarDir); static int symLink(String target, String linkname); static int chmod(String filename, String perm
                          ); static int chmod(String filename, String perm, boolean recursive); static void setOwner(File file, String username,
      String groupname); static boolean setReadable(File f, boolean readable); static boolean setWritable(File f, boolean writable); static boolean setExecutable(File f, boolean executable); static boolean canRead(File f); static boolean canWrite(File f); static boolean canExecute(File f); static void setPermission(File f, FsPermission permission
                                   ); static final File createLocalTempFile(final File basefile,
                                               final String prefix,
                                               final boolean isDeleteOnExit); static void replaceFile(File src, File target); static File[] listFiles(File dir); static String[] list(File dir); static String[] createJarWithClassPath(String inputClassPath, Path pwd,
      Map<String, String> callerEnv); static String[] createJarWithClassPath(String inputClassPath, Path pwd,
      Path targetDir,
      Map<String, String> callerEnv); static final int SYMLINK_NO_PRIVILEGE; }
@Test (timeout = 30000) public void testGetDU() throws Exception { setupDirs(); long du = FileUtil.getDU(TEST_DIR); final long expected = 2 * (3 + System.getProperty("line.separator").length()); Assert.assertEquals(expected, du); final File doesNotExist = new File(tmp, "QuickBrownFoxJumpsOverTheLazyDog"); long duDoesNotExist = FileUtil.getDU(doesNotExist); assertEquals(0, duDoesNotExist); File notADirectory = new File(partitioned, "part-r-00000"); long duNotADirectoryActual = FileUtil.getDU(notADirectory); long duNotADirectoryExpected = 3 + System.getProperty("line.separator").length(); assertEquals(duNotADirectoryExpected, duNotADirectoryActual); try { try { FileUtil.chmod(notADirectory.getAbsolutePath(), "0000"); } catch (InterruptedException ie) { assertNull(ie); } assertFalse(FileUtil.canRead(notADirectory)); final long du3 = FileUtil.getDU(partitioned); assertEquals(expected, du3); try { FileUtil.chmod(partitioned.getAbsolutePath(), "0000"); } catch (InterruptedException ie) { assertNull(ie); } assertFalse(FileUtil.canRead(partitioned)); final long du4 = FileUtil.getDU(partitioned); assertEquals(0, du4); } finally { FileUtil.chmod(partitioned.getAbsolutePath(), "0777", true); } }