使用java重命名特定目录上的相同文件

时间:2014-05-02 01:21:21

标签: java r.java-file

首先感谢您的时间,

我需要替换特定目录(TEMP)中相同文件的名称。我的问题是,我有x个相同的文件,其结构如下:timestamp_filename.txt我需要将此结构替换为filename_count.txt。

例如我有两个带有timestamp_file.txt的文件,我想用file.txt和file_1.txt替换它。

获取所有文件不是可以完成的事情,因为临时文件夹可以增长很多。

谢谢

1 个答案:

答案 0 :(得分:0)

  1. 将FilenameFilter对象与正则表达式结合使用,以检索临时文件夹中匹配文件的列表。

  2. 然后使用自定义比较器对结果列表进行排序,以便具有相同“文件”部分但不同“时间戳”部分的所有文件彼此相邻(以简化_1,_2,...的生成) 。版本)。

  3. 然后遍历结果列表,适当地重命名/移动文件。

  4. 这是一个示例文件名过滤器,它使用正则表达式来匹配文件名:

    public class REFilenameFilter implements FilenameFilter {
    
        /** The regular expression to use when matching file names. */
        final String regularExpression;
    
    
        /**
         * Constructor.
         *
         * @param expression the regular expression to use when matching file names.
         */
        public REFilenameFilter(final String expression) {
            regularExpression = expression;
        }
    
    
        /**
         * Returns true if the file matches the regular expression.
         *
         * @param dir the directory containing the file.
         * @param name the name of the file.
         * @return true if the name of the file matches the regular expression, otherwise false.
         */
        public boolean accept(final File dir, final String name) {
            // return true if the name matches the regular expression
            return name.matches(regularExpression);
        }
    
    }
    

    这是一个示例比较器(假设你的时间戳只是一个长):

    public class TempFileComparator implements Comparator<File> {
    
        public int compare(final File file1, final File file2) {
            String[] parts1 = file1.getName().split("_");
            String[] parts2 = file2.getName().split("_");
    
            int comp = parts1[1].compareTo(parts2[1]);
            if(comp == 0) {
                Long timestamp1 = Long.parseLong(parts1[0]);
                Long timestamp2 = Long.parseLong(parts2[0]);
                comp = timestamp1.compareTo(timestamp2);
            }
    
            return comp;
        }
    
    }