From 3aece9551b9a63bb5d14a1ac789a5b29757fd4ba Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Tue, 8 Dec 2015 21:51:05 +0100 Subject: [PATCH] Small refactoring --- Zutil.jar | Bin 1179892 -> 1182343 bytes src/zutil/StringUtil.java | 19 ++++- src/zutil/io/file/FileSearcher.java | 9 ++ src/zutil/io/file/FileUtil.java | 122 ++++++++-------------------- 4 files changed, 62 insertions(+), 88 deletions(-) mode change 100644 => 100755 src/zutil/StringUtil.java diff --git a/Zutil.jar b/Zutil.jar index 80d2ba28a2c73ec3dad603ee514318a115816ae8..d5e96e2e6abef1522678762e11ba8596eaf4190f 100755 GIT binary patch delta 36977 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 delta 34491 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 diff --git a/src/zutil/StringUtil.java b/src/zutil/StringUtil.java old mode 100644 new mode 100755 index 5af84f3..9658de3 --- a/src/zutil/StringUtil.java +++ b/src/zutil/StringUtil.java @@ -112,7 +112,22 @@ public class StringUtil { return str.toString(); } - + + /** + * Generates a String where the number has been prefixed + * with zeros until the string has the wanted size. + * + * @param number + * @param length + * @return a new String with the given length or longer if the number has more characters. + */ + public static String prefixInt(int number, int length){ + StringBuilder str = new StringBuilder().append(number).reverse(); + while (str.length() < length) + str.append('0'); + return str.reverse().toString(); + } + /** * Trims the given char and whitespace at the beginning and the end * @@ -218,7 +233,7 @@ public class StringUtil { * @return A string containing a specific amount of spaces */ public static String getSpaces(int i){ - if(SPACES.size() <= i){ // Generate the String with spaces + if(SPACES.size() <= i){ // Do we need to generate more spaces? synchronized (SPACES) { // Make sure no one else updates the list at the same time if(SPACES.size() <= i) { // Make sure the previous synchronized thread hasn't already generated strings if (SPACES.isEmpty()) diff --git a/src/zutil/io/file/FileSearcher.java b/src/zutil/io/file/FileSearcher.java index e995ae7..92cc242 100755 --- a/src/zutil/io/file/FileSearcher.java +++ b/src/zutil/io/file/FileSearcher.java @@ -87,12 +87,21 @@ public class FileSearcher implements Iterable{ // this.depth = depth; //} + /** + * Sets if the searcher should match to files. + */ public void searchFiles(boolean searchFiles){ this.searchFiles = searchFiles; } + /** + * Sets if the searcher should match to folders. + */ public void searchFolders(boolean searchFolders){ this.searchFolders = searchFolders; } + /** + * Sets if the searcher should go into compressed files. + */ public void searchCompressedFiles(boolean searchCompressedFiles){ this.searchCompressedFiles = searchCompressedFiles; } diff --git a/src/zutil/io/file/FileUtil.java b/src/zutil/io/file/FileUtil.java index 82a23ee..1c0c2af 100755 --- a/src/zutil/io/file/FileUtil.java +++ b/src/zutil/io/file/FileUtil.java @@ -24,12 +24,14 @@ package zutil.io.file; +import zutil.StringUtil; import zutil.io.IOUtil; import zutil.log.LogUtil; import java.io.*; import java.net.URISyntaxException; import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -94,7 +96,7 @@ public class FileUtil { * @param source * @param destination */ - public static void copy(String source, String destination) throws IOException{ + public static void copy(File source, File destination) throws IOException{ try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(source)); BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(destination));){ @@ -102,6 +104,25 @@ public class FileUtil { } } + /** + * Returns a nonexistent file that has the same name as the + * provided file but appended with a number sequence. + * + * @param file is the original file or subsequent files returned by this method + * @return a new File object with four numbers. + * First call will return {FILE_NAME}.0001 and each + * subsequent call will return a incremented the number + * if the previous file was created. + */ + public static File getNextFile(File file){ + for(int i = 1; i<10000; ++i){ + File next = new File(file.getParentFile(), file.getName()+"."+ StringUtil.prefixInt(i, 4)); + if(!next.exists()) + return next; + } + return null; + } + /** * Returns the URL to the given file * @@ -175,106 +196,35 @@ public class FileUtil { } /** - * Cache for the search functions - */ - private static HashMap> search_cache = new HashMap>(); - - - /** - * An Cache Item class to identify different cached items - * @author Ziver - */ - private static class SearchItem{ - private File dir; - private boolean folders; - private int recurse; - - protected SearchItem(File dir, boolean folders, int recurse){ - this.dir = dir; - this.folders = folders; - this.recurse = recurse; - } - - public boolean equals(Object o){ - if(o!=null && o instanceof SearchItem){ - SearchItem si = (SearchItem)o; - return dir.equals(si.dir) && folders == si.folders && recurse == si.recurse; - } - return false; - } - public int hashCode(){ - int hash = 133; - hash = 23 * hash + dir.hashCode(); - hash = 23 * hash + (folders ? 1 : 0); - hash = 23 * hash + recurse; - return 0; - } - } - - /** - * Same as search(File dir) but it caches the result - * to be used next time this function is called with - * the same parameters. - */ - public static List cachedSearch(File dir){ - return cachedSearch(dir, new LinkedList(), true); - } - - /** - * Same as search(File dir, List fileList, boolean recursive) - * but is caches the result to be used next time this function is - * called with the same parameters. - */ - public static List cachedSearch(File dir, List fileList, boolean recursive){ - return cachedSearch(dir, new LinkedList(), false, (recursive ? Integer.MAX_VALUE : 0)); - } - - /** - * Same as search(File dir, List fileList, boolean folders, int recurse) - * but is caches the result to be used next time this function is called - * with the same parameters. - */ - public static List cachedSearch(File dir, List fileList, boolean folders, int recurse){ - SearchItem si = new SearchItem(dir, folders, recurse); - if( search_cache.containsKey(si) ){ - fileList.addAll( search_cache.get(si) ); - return fileList; - } - search(dir, fileList, folders, recurse); - search_cache.put(si, fileList); - return fileList; - } - - /** - * Returns a List with all the files in a folder and sub folders + * Searches the directory and all its subdirectories * * @param dir is the directory to search in - * @return The List with the files + * @return a List of files */ public static List search(File dir){ return search(dir, new LinkedList(), true); } /** - * Returns a ArrayList with all the files in a folder and sub folders + * Searches the directory and all its subdirectories * * @param dir is the directory to search in - * @param fileList is the List to add the files to - * @param recursive is if the method should search the sub directories to. - * @return A List with the files + * @param fileList an existing List to add all files found + * @param recursive if the search should go into subdirectories + * @return A List of files */ public static List search(File dir, List fileList, boolean recursive){ return search(dir, new LinkedList(), false, (recursive ? Integer.MAX_VALUE : 0)); } /** - * Returns a ArrayList with all the files in a folder and sub folders + * Searches the directory and all its subdirectories * - * @param dir is the directory to search in - * @param fileList is the List to add the files to - * @param folders is if the method should add the folders to the List - * @param recurse is how many times it should recurse into folders - * @return A List with the files and/or folders + * @param dir is the root directory to start searching from + * @param fileList an existing List to add all files found + * @param folders is if the method should add folders to the List also + * @param recurse if the search should go into subdirectories + * @return A List with the files and/or folders */ public static List search(File dir, List fileList, boolean folders, int recurse){ if(recurse<0) @@ -326,13 +276,13 @@ public class FileUtil { } /** - * Replaces the current extension on the file withe the given one. + * Replaces the current extension on the file with the given one. * * @param file is the name of the file * @param ext is the new extension, without the dot * @return */ - public static String changeExtension(String file, String ext) { + public static String replaceExtension(String file, String ext) { if( file == null ) return null; if( file.lastIndexOf(".") == -1 )