파일 업로드 설명이 잘 되어 있는 사이트.

https://steemit.com/kr-dev/@capslock/java-sftp-using-jsch-sftp

가끔 오픈 소스를 찾아서 보게 되면 자바 네이밍룰을 지키고 있지 않은 소스들이 많이 보이는거 같다...

물론 나도 매번 지키는건 아니고, 안지킨다고 해서 에러가 나는건 아니지만 그래도 암묵적인 규칙이다 보니 자바 개발자로써 지키려고 나름 

노력은 하고 있다...ㅎㅎ

그래서 오늘 찾아 보니 네이버 지식인 오픈 백과에 어떤 분이 네이밍룰을 잘~ 설명을 해 놓으셔서 

링크 공유를 해본다...


http://kin.naver.com/open100/detail.nhn?d1id=1&dirId=1040201&docId=1484153



 
/**
     * 음력의 일자를 가지고 물때를 계산한다.
     * 서해의 물때를 기준으로 계산한다.
     * @param lunaDay 음력의 일짜.
     * @return
     */
    public static int getSeaTime(int lunaDay){

        int rtnValue = 0;

        int calc = (lunaDay+6)-15 > 15?(lunaDay+6)-30:(lunaDay+6)-15 ;


        if(calc <= 0){
            if(calc == 0){
                rtnValue = 15;
            }
            else{
                rtnValue = (lunaDay+6);
            }
        }
        else{
            rtnValue = calc;
        }

        return rtnValue;
    }
}
라이브러리: icu4j 다운로드 : http://site.icu-project.org/download/48#ICU4J-Download
icu4j-4_8_1_1.jar
 
package com.tistory.yysvip.calendar;
 import java.util.Calendar;
 import org.apache.log4j.Logger;
 import com.ibm.icu.util.ChineseCalendar;
 
/**
 * 
 * com.tistory.petulantman.calendar
 *    |_ LunarCalendar.java
 *
 * 
 * @date : 2012. 4. 25. 오전 9:52:35  * @version :  * @author : 까칠한쑤  */ public class LunarCalendar {           private Logger log = Logger.getLogger(this.getClass());           private Calendar cal ;         private ChineseCalendar cc ;             public LunarCalendar() {                 // default TimeZone, Locale 을 사용..                 cal = Calendar.getInstance() ;                 cc = new ChineseCalendar();         }           /**          *
         
         * 1. 개요 : 양력(yyyyMMdd) -> 음력(yyyyMMdd)
         * 2. 처리내용 : 양력을 음력으로 변환처리한다.
         * 
         * @Method Name : toLunar          * @date : 2012. 4. 25.          * @author : 까칠한쑤          * @history :          *      -----------------------------------------------------------------------          *      변경일                          작성자                                          변경내용          *      ----------- ------------------- ---------------------------------------          *      2012. 4. 25.            까칠한쑤                                최초 작성          *      -----------------------------------------------------------------------          *          * @param yyyymmdd          * @return          */         public synchronized String toLunar( String yyyymmdd ) {                 if(    yyyymmdd == null )                         return "" ;                   String date = yyyymmdd.trim() ;                 if( date.length() != 8 ) {                         if( date.length() == 4 )                                 date = date + "0101" ;                         else if( date.length() == 6 )                                 date = date + "01" ;                         else if( date.length() > 8 )                                 date = date.substring(0,8) ;                         else                                 return "" ;                 }                   cal.set( Calendar.YEAR, Integer.parseInt(date.substring(0,4)) ) ;                 cal.set( Calendar.MONTH, Integer.parseInt(date.substring(4,6))-1 ) ;                 cal.set( Calendar.DAY_OF_MONTH, Integer.parseInt(date.substring(6)) ) ;                   cc.setTimeInMillis( cal.getTimeInMillis() ) ;                   // ChinessCalendar.YEAR 는 1~60 까지의 값만 가지고 ,                   // ChinessCalendar.EXTENDED_YEAR 는 Calendar.YEAR 값과 2637 만큼의 차이를 가집니다.                 int y = cc.get(ChineseCalendar.EXTENDED_YEAR)-2637 ;                 int m = cc.get(ChineseCalendar.MONTH)+1 ;                 int d = cc.get(ChineseCalendar.DAY_OF_MONTH) ;                   StringBuffer ret = new StringBuffer() ;                 if( y < 1000 )          ret.append( "0" ) ;                 else if( y < 100 )      ret.append( "00" ) ;                 else if( y < 10 )       ret.append( "000" ) ;                 ret.append( y ) ;                   if( m < 10 ) ret.append( "0" ) ;                 ret.append( m ) ;                   if( d < 10 ) ret.append( "0" ) ;                 ret.append( d ) ;                   return ret.toString() ;         }           /**          *
         
         * 1. 개요 : 음력(yyyyMMdd) -> 양력(yyyyMMdd)
         * 2. 처리내용 : 음력을 양력으로 변환처리한다.
         * 
         * @Method Name : fromLunar          * @date : 2012. 4. 25.          * @author : 까칠한쑤          * @history :          *      -----------------------------------------------------------------------          *      변경일                          작성자                                          변경내용          *      ----------- ------------------- ---------------------------------------          *      2012. 4. 25.            까칠한쑤                                최초 작성          *      -----------------------------------------------------------------------          *          * @param yyyymmdd          * @return          */         public synchronized String fromLunar( String yyyymmdd )         {                 if (yyyymmdd == null ) return "" ;                   String date = yyyymmdd.trim() ;                   if( date.length() != 8 ) {                         if( date.length() == 4 )                                 date = date + "0101" ;                         else if( date.length() == 6 )                                 date = date + "01" ;                         else if( date.length() > 8 )                                 date = date.substring(0,8) ;                         else                                 return "" ;                 }                   cc.set( ChineseCalendar.EXTENDED_YEAR, Integer.parseInt(date.substring(0,4))+2637 ) ;                 cc.set( ChineseCalendar.MONTH, Integer.parseInt(date.substring(4,6))-1 ) ;                 cc.set( ChineseCalendar.DAY_OF_MONTH, Integer.parseInt(date.substring(6)) ) ;                   cal.setTimeInMillis( cc.getTimeInMillis() ) ;                   int y = cal.get(Calendar.YEAR) ;                 int m = cal.get(Calendar.MONTH)+1 ;                 int d = cal.get(Calendar.DAY_OF_MONTH) ;                   StringBuffer ret = new StringBuffer() ;                 if( y < 1000 )          ret.append( "0" ) ;                 else if( y < 100 )      ret.append( "00" ) ;                 else if( y < 10 )       ret.append( "000" ) ;                 ret.append( y ) ;                   if( m < 10 ) ret.append( "0" );                 ret.append( m ) ;                   if( d < 10 ) ret.append( "0" );                 ret.append( d ) ;                   return ret.toString() ;         }           public static void main(String args[])         {                 LunarCalendar lc = new LunarCalendar() ;                   System.out.println("2012년 4월 25일에 대한 음력날짜는 아래와 같습니다.");                 System.out.println( lc.toLunar("20120425") ) ; // 양력을 음력으로 바꾸기                   System.out.println("2012년 4월 05일에 대한 양력날짜는 아래와 같습니다.");                 System.out.println( lc.fromLunar("20120405") ) ; // 2012년 4월 25일에 대한 음력날짜를 집어넣는다.         } // end class }
출처 : http://yysvip.tistory.com/159
java에 random 함수를 사용하여 특정 문자열을 지정해서 그 중에 랜덤으로 문자를 추출해서 임시 비밀번호를 생성하는 로직을 만들게 되었다...
 
public static String getRandomPw(){
    //특정 문자열을 지정한다.(length:40)
    String str = "1234MNO890ABCDEFGHIJKL567PQRSTUVWXYZSLK";

    //랜덤 함수를 선언을 하고...
    Random random = new Random();

    //random.nextInt 메소드를 이용해 0~39 사이 무작위 정수를 추출 한후 
    //(nextInt는 0부터 시작이고, max 값은 -1의 값이 온다.)
    //주어진 문자열에서 해당하는 index의 문자를 다시 추출하게 된다.
    char a = str.charAt(random.nextInt(40));
    char b = str.charAt(random.nextInt(40));
    char c = str.charAt(random.nextInt(40));
    char d = str.charAt(random.nextInt(40));
    char e = str.charAt(random.nextInt(40));
    char f = str.charAt(random.nextInt(40));

    //마지막으로 이렇게 해주면...6자리의 랜덤한 문자열이 만들어지게 된다.
    return a+b+c+d+e+f;
}

String charset[] = {"euc-kr", "ksc5601", "iso-8859-1", "8859_1", "ascii"};

for(int i=0; i<charset.length ; i++){

    for(int j=0 ; j<charset.length ; j++){

        if(i==j){

            continue;

        }

        else{

            System.out.println(charset[i]+" : "+charset[j]+" :"+new String(pDesc.getBytes(charset[i]),charset[j])+"<br>");

        }

    }

}


일반적으로 웹에서 ActiveX를 사용하지 않는 이상 멀티 다운로드는 불가능하다고 봐야 합니다.
저도 여러가지 방법을 생각해 보고 구현도 해봤지만 업로드는 멀티 업로드가 되는대 
다운로드 같은 경우는 울며 겨자먹기로 ActiveX를 사용하거나 아니면 
다운로드할 파일들을 서버에서 압축하여 압축된 파일을 다운로드 하는 방법 뿐이 현제로써는
가장 좋은 방법일거 같습니다. 
아래 소스는 실제 구현했던 소스중 서버에서 파일 압축하는 로직만 분리한것 입니다.
궁금하신사항 있으면 댓글 달아 주세요.
===========================================================================================
jdk 5 에서 기본 지원하는 
java.util.zip.ZipEntry;
java.util.zip.ZipOutputStream;
도 있으나 테스트 결과 output 으로 나오는 .zip 파일은 한글이
정상적으로 나오나 압축 파일안에 있는 한글 파일들이 깨짐;;;
그래서 첨부파일 있는 ant.jar 를 이용해서 해결
import org.apache.tools.zip.ZipEntry; //ant.jar 이용
import org.apache.tools.zip.ZipOutputStream; //ant.jar 이용
public boolean fileCompress(String filePath, String compressFile, String fileNm) {
// File dir = new File("c:\\temp");
String[] fnames = fileNm.split("\\|");
try{
byte[] bytes = new byte[8192];
String targetName = filePath+"/"+compressFile;
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(targetName));
for(int i=0; i<fnames.length; i++){
System.out.println(fnames[i]);
FileInputStream fis = new FileInputStream(filePath+"/"+fnames[i]);
zos.putNextEntry(new ZipEntry(fnames[i]));
int len = 0;
while((len = fis.read(bytes))>0)
{
zos.write(bytes, 0, len);
}
zos.closeEntry();
fis.close();
}
zos.close();
}catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}

ant.jar


+ Recent posts