728x90
반응형

파일 존재여부확인하여 시퀀스번호를 붙이는 유틸


파일 을 복사하여 사용자에게 zip 으로 묶어주는 프로그램을 만들던중 동일한 파일명을 가진 파일에 대한 처리가 필요하여 만들어본 유틸이다.

작업중인 디렉토리에 동일한 파일명이 존재한다면 recursive 하게 메서드를 호출하여 _1,_2,_3 ... 같이 파일명뒤에 시퀀스를 카운트해준다.


테스트 케이스는 아래와 같다. 

test_ - 복사본.txt

test_.txt

test.txt

test_1.txt

_test_1.txt

_.txt

_1.txt

위 와 같은 테스트 형식의 파일이 들어올경우에 대해서도 테스트 가 끝난 코드이므로 일반적인 예에서의 버그는 적을꺼라 보긴하나

추가적으로 버그가 리포팅된다면 소스도 변경하도록하겠다.


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
    /**
     * 동일한 파일명의 파일이 존재하는지 확인하여 존재한다면 파일명 뒤에 "_숫자" 를 
     * 붙이고 "_숫자"가 존재한다면 "_숫자" +1 을 더한값을 재귀적으로 카운트
     * @author digimon1740
     * */
    public static String appendSuffixName(String orgFileName, int seq) {
        String retFileName = "";
        // 파일이 존재하는지 확인한다.
        if (new File(orgFileName).exists()) {
            int plusSeq = 1;
 
            String seqStr = "_" + seq;
            String firstFileName = orgFileName.substring(0,
                    orgFileName.lastIndexOf("."));
            String extName = orgFileName
                    .substring(orgFileName.lastIndexOf("."));
 
            // 만약 파일명에 _숫자가 들어간경우라면..
            if (orgFileName.lastIndexOf("_") != -1
                    && !firstFileName.endsWith("_")) {
                String numStr = orgFileName.substring(
                        orgFileName.lastIndexOf("_") + 1,
                        orgFileName.lastIndexOf(extName));
                try {
                    plusSeq = Integer.parseInt(numStr);
                    plusSeq = plusSeq + 1;
                    
                    retFileName = firstFileName.substring(0,
                            firstFileName.lastIndexOf("_"))
                            + "_" + plusSeq + extName;
                } catch (NumberFormatException e) {
                    retFileName = firstFileName + seqStr + extName;
                    return appendSuffixName(retFileName, ++plusSeq);
                }
                
            } else {
                retFileName = firstFileName + seqStr + extName;
            }
            // 재귀
            return appendSuffixName(retFileName, ++plusSeq);
        } else {
            return orgFileName;
        }
    }


728x90
반응형

+ Recent posts