java 2008. 12. 5. 14:10

스윙] 웹상의 이미지 경로 로부터 파일저장




/*

웹상의 image url경로를 적어주게 되면 그 경로를 바탕으로 이미지를 로컬에 저장시켜주는 기능입니다.
아래 saveMethod는 다른이름으로 저장 버튼을 눌렀을시 이벤트가 발생하는 메서드입니다.
sava부분 로직만 참고!!


*/





private void savaMethod(java.awt.event.ActionEvent evt) {                           
    /*===============================================================
     * url_tf에 입력된 문자열을 가져온다. 그리고 그것이 비었는지 비교한후
     * 저장할수 있는 JFileChooser를 생성한다.
     * ==============================================================
     */
   
    String url_path = url_tf.getText().trim();
    if(url_path.length()>0){
        JFileChooser fc = new JFileChooser("c:"+System.getProperty("file.separator"));
        /*
         * 저장시 JFilechooser창에 파일명이 설정되도록 하는 부분
         */
        String f_name = url_path.substring(url_path.lastIndexOf("/")+1);
        File set_name = new File("C:"+System.getProperty("file.separator")+f_name);
        fc.setSelectedFile(set_name); // JFileChooser 창열릴시 파일명을 표시
       
        int cmd = fc.showSaveDialog(this);
            if(cmd==JFileChooser.APPROVE_OPTION){           
                /*
                 * 실제 저장할 파일은 웹상에 존재한다. 그것과
                 * 연결하여 현재 소스로 자원을 읽어올 통로(배관)이 필요한다.
                 * 웹사이트 문서와 연결이기 때문에 url객체 생성                 
                 */
                InputStream input = null;
                FileOutputStream fos = null;
                try {
                    input = new URL(url_path).openStream();
                    File f = fc.getSelectedFile();
                    /* =============================================================
                     * 이제 위에서 선택된 파일과 통로을 연결하여 자원들을 저장할수 있도록
                     * 배관작업을 한다.
                     * =============================================================
                     */
                    if (f.exists()) {
                        int ch = JOptionPane.showConfirmDialog(this, "덮어씌우겠습니까?");
                        if (ch == JOptionPane.CANCEL_OPTION) {
                            return;
                        }
                    }
                     /*
                      * ==========================================================
                      * 현재행에 제어가 넘어왔다면 파일이 존재하지 않거나 존재하더라도
                      * 덮어씌우기를 선택한 경우이다.
                      * ==========================================================
                      */
                    fos = new FileOutputStream(f);
                    //FileOutputStream을 통하여 파일에 쓰기
                    byte[] buf = new byte[2048];
                    int size = -1;
                    while((size = input.read(buf))!=-1){
                        fos.write(buf, 0, size);
                    }
                    JOptionPane.showMessageDialog(this, "저장완료!!");
                } catch (Exception ex) {   
                } finally {
                    try {
                        fos.close();
                    } catch (IOException ex) {
                    }
                }
            }
    }
}