헤르메스 LIFE

[Core Java] File List 떨구는 샘플 본문

Core Java

[Core Java] File List 떨구는 샘플

헤르메스의날개 2021. 3. 23. 01:07
728x90

운영서버에 파일을 올리기 위해서 오늘일자의 수정된 파일 목록을 떨구고, 그 파일을 다른 곳에 copy 해서 관리하는 간단한 Source

기준시간으로 부터 변경된 Source파일을 찾는 프로그램


package com.java .text;

import java. io.BufferedReader ;
import java. io.BufferedWriter ;
import java. io.File ;
import java. io.FileInputStream ;
import java. io.FileOutputStream ;
import java. io.FileReader ;
import java. io.FileWriter ;
import java. io.IOException ;
import java. io.PrintWriter ;
import java. text.SimpleDateFormat ;
import java. util.Date ;

import org. apache.log4j .Logger;

public class RequestFileList {
    private static final Logger     logger    = Logger.getLogger( RequestFileList.class. getName());
    private static SimpleDateFormat format    = new SimpleDateFormat ("yyyyMMddHHmmss");
    private static SimpleDateFormat format2    = new SimpleDateFormat ("yyyyMMdd") ;
    private static PrintWriter       out       = null ;
   
    // 파일 변경 기준 시간.
    private static String            STD_TIME  = "201511" + "15" + "080000";                        // 년월 + 일 + 시간 + 을 고치면 됩니다.
                                                                                                  
    // 프로젝트 HOME
    private static String            BASE_HOME = "C:/MyProject/workspace/project01" ;
   
    // 수정된 파일 목록이 쌓이는 파일이이 생성되는 폴더위치
    private static String           LIST_DIR  = "C:/temp/";
       
    // 수정된 파일을 찾을 모듈명
    private static String            MODULE1   = "comm" ;
    private static String            MODULE2   = "utils" ;
   
    private File                    modifyList ;
   
    public RequestFileList () {
        try {
            modifyList = new File( LIST_DIR + "si_" + format.format (new Date()) + ".txt" );
            out = new PrintWriter( new BufferedWriter (new FileWriter(modifyList )));
        } catch (IOException ie) {
            ie .printStackTrace() ;
        }
    }
   
    public static void main( String args[] ) {
        RequestFileList localToServer = new RequestFileList();
       
        // 변경된 모듈별로,
        // 파일에 목록을 작성한다.
        try {
            logger .info( "파일 찾기 시작 : " + format.format( System.currentTimeMillis())) ;
           
            // 수정된 파일을 찾을 폴더
            File srcDir = new File(BASE_HOME + "/WebRoot/" + MODULE1 );
            localToServer .findFileDir( srcDir);
           
            srcDir = new File( BASE_HOME + "/src/com/" + MODULE1);
            localToServer .findFileDir( srcDir);
           
            srcDir = new File( BASE_HOME + "/WebRoot/" + MODULE2);
            localToServer .findFileDir( srcDir);
           
            srcDir = new File( BASE_HOME + "/src/com/" + MODULE2);
            localToServer .findFileDir( srcDir);
            logger .info( "파일 찾기 종료 : " + format.format( System.currentTimeMillis())) ;
           
            // System.out.println(localToServer.modifyList.getName());
           
        } catch (Exception e) {
            e .printStackTrace() ;
        } finally {
            try {
                // File Flush & Close
                out .flush() ;
                out .close() ;
            } catch (Exception e) {
                e .printStackTrace() ;
            }
        }
       
        System.out. println("---------------- 복사 시작 ------------------" );
       
        try {
            localToServer .copyFile() ;
        } catch (Exception e) {
            e .printStackTrace() ;
        }
       
        System.out. println("-------------- 복사 종료 --------------------" );
       
        System.exit( -1) ;
    }
   
    /*
     * 변경된 파일을 COPY 한다.
     */
    public void copyFile() throws Exception {
        // 파일복사 시작
        FileInputStream fInS = null;
        FileOutputStream fOutBackS = null;
        File folder = null;
        BufferedReader br = null;
        String s = "";
        String pathName = "";
       
        try {
            br = new BufferedReader( new FileReader (LIST_DIR + modifyList. getName()));

            while (( s = br .readLine() ) != null ) {
                pathName = s. replaceAll(BASE_HOME , "" );
               
                //logger.info((LIST_DIR + format2.format(new Date()) + pathName).substring(0, (LIST_DIR + format2.format(new Date()) + pathName).lastIndexOf("/")));

                folder = new File(( LIST_DIR + format2 .format( new Date ()) + pathName).substring (0, (LIST_DIR + format2. format(new Date()) + pathName).lastIndexOf ("/"))) ;
                if(! folder.exists ()){
                    folder .mkdirs() ;
                }
               
                try {
                    fInS = new FileInputStream( s);
                    fOutBackS = new FileOutputStream( LIST_DIR + format2 .format( new Date()) + pathName) ;
                   
                    byte[] buffer = new byte[ 1024];
                    while ( true) {
                        int count = fInS.read (buffer) ;
                        if ( count == -1) {
                            break;
                        }
                        fOutBackS .write( buffer, 0, count );
                    }
                   
                } catch (Exception e) {
                    e .printStackTrace() ;
                } finally {
                    try {
                        if ( fInS != null) fInS .close() ;
                        if ( fOutBackS != null) fOutBackS .close() ;
                    } catch (Exception e) {
                        e .printStackTrace() ;
                    }
                }

            }
        } catch (IOException ioe) {
            throw ioe;
        } finally {
            if ( br != null) br .close() ;
        }
    }
   
    /*
     * 확장자 Return
     */
    public String getFileExt( String fileName ) {
        int pos = fileName.lastIndexOf (".") ;
        return fileName. substring(pos + 1 );
    }
   
    /*
     * 파일명 Return
     */
    public String getFileName( String fileName ) {
        int pos1 = fileName.lastIndexOf ("/") ;
        int pos2 = fileName.lastIndexOf (".") ;
        return fileName. substring(pos1 , pos2) ;
    }
   
    /*
     * 파일명 경로 Return
     */
    public String getFileName2( String fileName ) {
        int pos1 = fileName.lastIndexOf ("/") ;
        return fileName. substring(0 , pos1) ;
    }
   
    /*
     * 변경된 모듈별 폴더를 검색한다.
     */
    public void findFileDir( File srcDir ) throws Exception {
        if ( !srcDir. exists()) {
            logger .info( "file not found : " + srcDir .getCanonicalPath()) ;
            System.exit( -1) ;
        }
       
        File files[] = srcDir .listFiles() ;
        for ( int i = 0; i < files .length; i++) {
            if ( files[i ].isDirectory ()) {
                findFileDir (files[ i]);
            } else {
                findFile (files[ i]);
            }
        }
       
    }
   
    /*
     * 변경된 모듈별 파일을 검색한다.
     */
    public void findFile( File srcFile ) {
       
        try {
           
            if ( !srcFile. exists()) {
                logger .info( "file not found : " + srcFile .getCanonicalPath()) ;
                System.exit( -1) ;
            }
           
            // 기준시간
            Date stdDate = format.parse (STD_TIME) ;
           
            // 파일수정시간
            Date fileDate = format.parse (format. format(srcFile .lastModified())) ;
           
            String ext = getFileExt(srcFile .getName()) ;
           
            // 기준시간 이후 생성된 파일
            if (( stdDate.getTime () - fileDate.getTime () ) <= 0 && ( ext.equals( "jsp") || ext. equals("java" ) || ext.equals ("xml") )) {
               
                out .print( srcFile.getCanonicalPath ().replaceAll ("\\\\", "/") + "\n" );
            }
           
        } catch (Exception e) {
            e .printStackTrace() ;
        } finally {
           
        }
        return;
    }
   
}
728x90