Helius
2020-12-15 2914588a65371a3ce43f678cde0a26cd8da26611
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package com.matrix.component.ueditor;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class PathFormat {
    
    private static final String TIME = "time";
    private static final String FULL_YEAR = "yyyy";
    private static final String YEAR = "yy";
    private static final String MONTH = "mm";
    private static final String DAY = "dd";
    private static final String HOUR = "hh";
    private static final String MINUTE = "ii";
    private static final String SECOND = "ss";
    private static final String RAND = "rand";
    
    private static Date currentDate = null;
    
    public static String parse ( String input ) {
        
        Pattern pattern = Pattern.compile( "\\{([^\\}]+)\\}", Pattern.CASE_INSENSITIVE  );
        Matcher matcher = pattern.matcher(input);
        
        PathFormat.currentDate = new Date();
        
        StringBuffer sb = new StringBuffer();
        
        while ( matcher.find() ) {
            
            matcher.appendReplacement(sb, PathFormat.getString( matcher.group( 1 ) ) );
            
        }
        
        matcher.appendTail(sb);
        
        return sb.toString();
    }
    
    /**
     * 格式化路径, 把windows路径替换成标准路径
     * @param input 待格式化的路径
     * @return 格式化后的路径
     */
    public static String format ( String input ) {
        
        return input.replace( "\\", "/" );
        
    }
 
    public static String parse ( String input, String filename ) {
    
        Pattern pattern = Pattern.compile( "\\{([^\\}]+)\\}", Pattern.CASE_INSENSITIVE  );
        Matcher matcher = pattern.matcher(input);
        String matchStr = null;
        
        PathFormat.currentDate = new Date();
        
        StringBuffer sb = new StringBuffer();
        
        while ( matcher.find() ) {
            
            matchStr = matcher.group( 1 );
            if ( matchStr.indexOf( "filename" ) != -1 ) {
                filename = filename.replace( "$", "\\$" ).replaceAll( "[\\/:*?\"<>|]", "" );
                matcher.appendReplacement(sb, filename );
            } else {
                matcher.appendReplacement(sb, PathFormat.getString( matchStr ) );
            }
            
        }
        
        matcher.appendTail(sb);
        
        return sb.toString();
    }
        
    private static String getString ( String pattern ) {
        
        pattern = pattern.toLowerCase();
        
        // time 处理
        if ( pattern.indexOf( PathFormat.TIME ) != -1 ) {
            return PathFormat.getTimestamp();
        } else if ( pattern.indexOf( PathFormat.FULL_YEAR ) != -1 ) {
            return PathFormat.getFullYear();
        } else if ( pattern.indexOf( PathFormat.YEAR ) != -1 ) {
            return PathFormat.getYear();
        } else if ( pattern.indexOf( PathFormat.MONTH ) != -1 ) {
            return PathFormat.getMonth();
        } else if ( pattern.indexOf( PathFormat.DAY ) != -1 ) {
            return PathFormat.getDay();
        } else if ( pattern.indexOf( PathFormat.HOUR ) != -1 ) {
            return PathFormat.getHour();
        } else if ( pattern.indexOf( PathFormat.MINUTE ) != -1 ) {
            return PathFormat.getMinute();
        } else if ( pattern.indexOf( PathFormat.SECOND ) != -1 ) {
            return PathFormat.getSecond();
        } else if ( pattern.indexOf( PathFormat.RAND ) != -1 ) {
            return PathFormat.getRandom( pattern );
        }
        
        return pattern;
        
    }
 
    private static String getTimestamp () {
        return System.currentTimeMillis() + "";
    }
    
    private static String getFullYear () {
        return new SimpleDateFormat( "yyyy" ).format( PathFormat.currentDate );
    }
    
    private static String getYear () {
        return new SimpleDateFormat( "yy" ).format( PathFormat.currentDate );
    }
    
    private static String getMonth () {
        return new SimpleDateFormat( "MM" ).format( PathFormat.currentDate );
    }
    
    private static String getDay () {
        return new SimpleDateFormat( "dd" ).format( PathFormat.currentDate );
    }
    
    private static String getHour () {
        return new SimpleDateFormat( "HH" ).format( PathFormat.currentDate );
    }
    
    private static String getMinute () {
        return new SimpleDateFormat( "mm" ).format( PathFormat.currentDate );
    }
    
    private static String getSecond () {
        return new SimpleDateFormat( "ss" ).format( PathFormat.currentDate );
    }
    
    private static String getRandom ( String pattern ) {
        
        int length = 0;
        pattern = pattern.split( ":" )[ 1 ].trim();
        
        length = Integer.parseInt( pattern );
        
        return ( Math.random() + "" ).replace( ".", "" ).substring( 0, length );
        
    }
 
}