Noah_Developer
Developer Noah
Noah_Developer
전체 방문자
오늘
어제
  • 전체보기 (88)
    • Programmers (33)
      • Level1 (33)
    • FRONT-END (3)
      • React (2)
      • HTML (0)
      • CSS (0)
      • JavaScrpit (1)
    • BACK-END (23)
      • JAVA (14)
      • C (0)
      • Spring (5)
    • DATABASE (11)
      • MySQL (3)
      • Oracle (0)
    • IDE (2)
      • IntelliJ (2)
      • Eclipse (0)
      • VSCode (0)
    • Android (1)
    • 용어 (2)
      • 금융 (2)
    • Developer Diary (5)
      • Web (1)
    • 자격증 (1)
    • Operating System (3)
      • Linux (2)
    • Info (3)

블로그 메뉴

  • 홈
  • 방명록
  • 포트폴리오
  • 깃허브

공지사항

  • 🙏 방문 감사합니다.

인기 글

태그

  • 크레인 인형뽑기 풀이
  • 코딩테스트 준비
  • 크레인 인형뽑기 정답
  • level1
  • 코딩테스트 문제
  • 알고리즘 연습문제
  • 코딩테스트 문제 풀이
  • programmers
  • 크레인 인형뽑기
  • 알고리즘 풀이
  • 프로그래머스 문제풀이
  • 프로그래머스
  • String StringBuilder 차이
  • 초보자 알고리즘
  • 자바 알고리즘 연습문제
  • 카카오공채
  • 알고리즘 문제
  • 코딩테스트
  • 개발일기
  • 자바 쉬운 알고리즘
  • 알고리즘 블로그
  • 프로그래머스 레벨1
  • MySQL
  • 프로그래머스 연습문제
  • 알고리즘 예제
  • 알고리즘 쉬운문제
  • 카카오 블라인드
  • programmers level 1
  • 카카오 블라인드 테스트
  • 프로그래머스 코딩연습

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
Noah_Developer

Developer Noah

[Java] JSCH를 사용한 SFTP 서버 통신 및 파일 다운로드 예제
BACK-END/JAVA

[Java] JSCH를 사용한 SFTP 서버 통신 및 파일 다운로드 예제

2021. 4. 15. 10:40
728x90

자바 jcraft 라이브러리를 사용하여 SFTP 서버 통신 및 파일 다운로드 예제입니다.

서버의 IP와 아이디, 비밀번호 포트 번호까지 정확하게 입력하셔야 하고,

경로 부분 직접 작성해주셔야 합니다.

 

또한 Main이 없기때문에 해당 클래스 호출하는 Main 메소드 따로 작성해주셔야 하니 참고 부탁드립니다.


package noah;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Properties;
import java.util.Vector;

import com.jcraft.jsch.Channel; 
import com.jcraft.jsch.ChannelSftp; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.JSchException; 
import com.jcraft.jsch.Session; 
import com.jcraft.jsch.SftpException;
import com.jcraft.jsch.ChannelSftp.LsEntry;

public class SftpClient {
   
    /// Fields
    private Session session = null; 
    private Channel channel = null; 
    private ChannelSftp channelSftp = null;
    private static final String host = "IP";
    private static final String userName = "ID";
    private static final String password = "PW";
    private static final int port = port;

    /// Constructor
    public SftpClient(){      

        // SFTP 연결
        connect();

        // SFTP 파일 다운로드
        fileDownload();

        // 연결 끊기
        disconnection();

    }

    /// Method
    public void connect(){

        JSch jsch = new JSch();

        try{

            // Jsch 세션 생성
            session = jsch.getSession(userName, host, port);
            session.setPassword(password);

            // 세션과 관련된 정보 설정
            Properties config = new Properties();
            // 호스트정보 검사 하지 않음.
            config.put("StrictHostKeyChecking", "no");

            session.setConfig(config);
            session.connect();

            channel = session.openChannel("sftp");
            channel.connect();

        } catch(JSchException je) {
            je.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

        channelSftp = (ChannelSftp) channel;
    
    }

    public void fileDownload(){

        InputStream is = null; 
        FileOutputStream out = null;
        String date = "210322";
        String path = "경로";       

        try { 

            // 경로 이동
            channelSftp.cd(path); 

            // 해당 경로 파일 리스트 받아오기
            Vector<ChannelSftp.LsEntry> fileList = channelSftp.ls(path);

            // LsEntry 건수 만큼 처리
            for(LsEntry entry : fileList){              

                // 경로에서 받은 파일명 변수 처리
                String fileName = entry.getFilename();                

                // [. , ..] 경로 파일명이 아니면서, 파일 명에 -가 포함되어있고 요청하는 date로 끝나는 파일명 있는가?
                if(!fileName.equals(".") && !fileName.equals("..") && fileName.contains("-") && fileName.endsWith(date)){
                  
                    // 파일 GET
                    is = channelSftp.get(fileName);
                    
                    // 원하는 경로에 파일 생성
                    File localFile = new File("./log/"+fileName);

                    out = new FileOutputStream(localFile);

                    int readCount = 0;
                    while( (readCount = is.read()) > 0 ){
                        out.write(readCount);
                    }

                    is.close();
                    out.close();

                }
            }
        } catch (SftpException se) {
            se.printStackTrace();
        } catch ( Exception e){
            e.printStackTrace();
        }
    }

    public void disconnection() { 
        channelSftp.quit(); 
        channel.disconnect();
        session.disconnect();
    }
}
728x90
저작자표시 비영리 동일조건 (새창열림)

'BACK-END > JAVA' 카테고리의 다른 글

[Java] 로그 생성 파일 경로 추출  (0) 2021.04.19
[Java] 알고리즘 문자열 2진 검색(Binary Search) 예제  (0) 2021.04.16
자바 제어자 (Modifier)  (0) 2019.03.19
자바 접근제어자(Access Modifier)  (0) 2019.03.18
OOP(Object Oriented Programming)  (0) 2019.03.16
    'BACK-END/JAVA' 카테고리의 다른 글
    • [Java] 로그 생성 파일 경로 추출
    • [Java] 알고리즘 문자열 2진 검색(Binary Search) 예제
    • 자바 제어자 (Modifier)
    • 자바 접근제어자(Access Modifier)
    Noah_Developer
    Noah_Developer
    개발 기록 목적을 가진 블로그입니다.

    티스토리툴바