From 8e1807b89e6e78ada27a1c52699a500345a8c201 Mon Sep 17 00:00:00 2001 From: Pranet Verma Date: Fri, 9 Mar 2018 02:36:10 +0530 Subject: [PATCH 1/3] Extract out duplicate code from move methods --- .../java/org/apache/commons/io/FileUtils.java | 62 ++++++++----------- 1 file changed, 25 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/apache/commons/io/FileUtils.java b/src/main/java/org/apache/commons/io/FileUtils.java index 3dfb24efac5..6bfcdc02627 100644 --- a/src/main/java/org/apache/commons/io/FileUtils.java +++ b/src/main/java/org/apache/commons/io/FileUtils.java @@ -2899,15 +2899,7 @@ public static Checksum checksum(final File file, final Checksum checksum) throws * @since 1.4 */ public static void moveDirectory(final File srcDir, final 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"); - } + validateMoveParameters(srcDir, destDir); if (!srcDir.isDirectory()) { throw new IOException("Source '" + srcDir + "' is not a directory"); } @@ -2943,12 +2935,7 @@ public static void moveDirectory(final File srcDir, final File destDir) throws I */ public static void moveDirectoryToDirectory(final File src, final File destDir, final 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"); - } + validateMoveParameters(src, destDir); if (!destDir.exists() && createDestDir) { destDir.mkdirs(); } @@ -2960,7 +2947,6 @@ public static void moveDirectoryToDirectory(final File src, final File destDir, throw new IOException("Destination '" + destDir + "' is not a directory"); } moveDirectory(src, new File(destDir, src.getName())); - } /** @@ -2977,15 +2963,7 @@ public static void moveDirectoryToDirectory(final File src, final File destDir, * @since 1.4 */ public static void moveFile(final File srcFile, final 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"); - } + validateMoveParameters(srcFile, destFile); if (srcFile.isDirectory()) { throw new IOException("Source '" + srcFile + "' is a directory"); } @@ -3021,12 +2999,7 @@ public static void moveFile(final File srcFile, final File destFile) throws IOEx */ public static void moveFileToDirectory(final File srcFile, final File destDir, final 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"); - } + validateMoveParameters(srcFile, destDir); if (!destDir.exists() && createDestDir) { destDir.mkdirs(); } @@ -3057,20 +3030,35 @@ public static void moveFileToDirectory(final File srcFile, final File destDir, f */ public static void moveToDirectory(final File src, final File destDir, final boolean createDestDir) throws IOException { + validateMoveParameters(src, destDir); + if (src.isDirectory()) { + moveDirectoryToDirectory(src, destDir, createDestDir); + } else { + moveFileToDirectory(src, destDir, createDestDir); + } + } + + /** + * Validates the given arguments. + * + * + * @param src the file or directory to be moved + * @param dest the destination file or directory + */ + private static void validateMoveParameters(final File src, final File dest) throws IOException { if (src == null) { throw new NullPointerException("Source must not be null"); } - if (destDir == null) { + if (dest == 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); - } } /** From 5f2c97de90740e5dcf1102d33ee19ff21c4f2252 Mon Sep 17 00:00:00 2001 From: Pranet Verma Date: Fri, 9 Mar 2018 03:10:09 +0530 Subject: [PATCH 2/3] Extract out duplicate code from list file/directory methods --- .../java/org/apache/commons/io/FileUtils.java | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/apache/commons/io/FileUtils.java b/src/main/java/org/apache/commons/io/FileUtils.java index 6bfcdc02627..108a803b78f 100644 --- a/src/main/java/org/apache/commons/io/FileUtils.java +++ b/src/main/java/org/apache/commons/io/FileUtils.java @@ -513,16 +513,7 @@ private static void innerListFiles(final Collection files, final File dire */ public static Collection listFiles( final File directory, final IOFileFilter fileFilter, final IOFileFilter dirFilter) { - validateListFilesParameters(directory, fileFilter); - - final IOFileFilter effFileFilter = setUpEffectiveFileFilter(fileFilter); - final IOFileFilter effDirFilter = setUpEffectiveDirFilter(dirFilter); - - //Find files - final Collection files = new java.util.LinkedList<>(); - innerListFiles(files, directory, - FileFilterUtils.or(effFileFilter, effDirFilter), false); - return files; + return innerListFilesOrDirectories(directory, fileFilter, dirFilter, false); } /** @@ -586,6 +577,27 @@ private static IOFileFilter setUpEffectiveDirFilter(final IOFileFilter dirFilter */ public static Collection listFilesAndDirs( final File directory, final IOFileFilter fileFilter, final IOFileFilter dirFilter) { + return innerListFilesOrDirectories(directory, fileFilter, dirFilter, true); + } + + /** + * Finds files within a given directory (and optionally its + * subdirectories). All files found are filtered by an 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 {@code null}, subdirectories will not be included in the + * search. Use TrueFileFilter.INSTANCE to match all directories. + * @param includeSubDirectories indicates if will include the subdirectories themselves + * @return a collection of java.io.File with the matching files + * @see org.apache.commons.io.FileUtils#listFiles + * @see org.apache.commons.io.filefilter.FileFilterUtils + * @see org.apache.commons.io.filefilter.NameFileFilter + */ + private static Collection innerListFilesOrDirectories( + final File directory, final IOFileFilter fileFilter, final IOFileFilter dirFilter, + boolean includeSubDirectories) { validateListFilesParameters(directory, fileFilter); final IOFileFilter effFileFilter = setUpEffectiveFileFilter(fileFilter); @@ -593,9 +605,11 @@ public static Collection listFilesAndDirs( //Find files final Collection files = new java.util.LinkedList<>(); - files.add(directory); + if (includeSubDirectories) { + files.add(directory); + } innerListFiles(files, directory, - FileFilterUtils.or(effFileFilter, effDirFilter), true); + FileFilterUtils.or(effFileFilter, effDirFilter), includeSubDirectories); return files; } From 95a112019ad54115961f4e186a2d30a8cbff4b12 Mon Sep 17 00:00:00 2001 From: Pranet Verma Date: Fri, 9 Mar 2018 03:30:03 +0530 Subject: [PATCH 3/3] Replace IOException with FileNotFoundException --- src/main/java/org/apache/commons/io/FileUtils.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/commons/io/FileUtils.java b/src/main/java/org/apache/commons/io/FileUtils.java index 108a803b78f..9463f2192d1 100644 --- a/src/main/java/org/apache/commons/io/FileUtils.java +++ b/src/main/java/org/apache/commons/io/FileUtils.java @@ -3060,10 +3060,11 @@ public static void moveToDirectory(final File src, final File destDir, final boo *
  • Throws {@link FileNotFoundException} if {@code src} does not exist
  • * * - * @param src the file or directory to be moved - * @param dest the destination file or directory + * @param src the file or directory to be moved + * @param dest the destination file or directory + * @throws FileNotFoundException if {@code src} file does not exist */ - private static void validateMoveParameters(final File src, final File dest) throws IOException { + private static void validateMoveParameters(final File src, final File dest) throws FileNotFoundException { if (src == null) { throw new NullPointerException("Source must not be null"); }