반응형

FTPSClient 는 sftp접속을 할 수 없다는... 그래서 jsch라이브러리 이용.


jsch-0.1.49.jar 파일은 첨부함.

jsch-0.1.49.jar

@Controller
public class Test{

 
 @RequestMapping(value="/test", method=RequestMethod.GET)
 public void test(HttpServletRequest request, HttpServletResponse response) throws Exception {
  

    connect();//아래의 메소드 실행
   
 }
 
 
    @SuppressWarnings("unchecked")
 private void connect() throws Exception {
      
         Session session = null; //com.jcraft.jsch.Session 참조함

        // 1. JSch 객체를 생성한다.
        JSch jsch = new JSch();


        // 2. 세션 객체를 생성한다 (사용자 이름, 접속할 호스트, 포트를 인자로 준다.)
//        session = jsch.getSession(username, host, port);
        session = jsch.getSession("유저", "아이피", 포트);


        // 3. 패스워드를 설정한다.
        session.setPassword("test");

        
        // 4. 세션과 관련된 정보를 설정한다.
        java.util.Properties config = new java.util.Properties(); 


        // 4-1. 호스트 정보를 검사하지 않는다.
        config.put("StrictHostKeyChecking", "no"); 
        session.setConfig(config);

        try{
         
         //5. 접속한다.       
         session.connect();
        
         // 6. sftp 채널을 연다.
         Channel channel = session.openChannel("sftp");
         ChannelSftp channelSftp = (ChannelSftp) channel;
         channelSftp.connect();

        
         StringBuffer sb = new StringBuffer();
         String ftpDir = "/test/info/";
         
         //디렉토리 접근
         channelSftp.cd(ftpDir);
                  
         //디렉토리 안의 목록 조회
         Vector flist = channelSftp.ls(ftpDir);
         
         for(ChannelSftp.LsEntry entry : flist){
         
          if(!entry.getFilename().equals(".") 

              ​&& !entry.getFilename().equals("..") 

              && entry.getFilename().indexOf(".") != 0){
           log.info("파일명 :"+entry.getFilename());
           

           //​버퍼로 읽기
           BufferedReader reader = new BufferedReader(new InputStreamReader(channelSftp.get(entry.getFilename())));
           

​/*

버퍼로 읽은 파일의 내용 ex, 

[{"id":"test","client_ip":"127.0.0.1"}]​

[{"id":"test","client_ip":"127.0.0.1"}]​

[{"id":"test","client_ip":"127.0.0.1"}]​​

*/​
  

         String readStr = "";

                 //한줄씩 읽으면서 json파서로 담는다
                 while((readStr = reader.readLine()) != null) {
                  log.info("################# readStr:"+readStr);
                  
                  Gson gson = new Gson();
            JsonParser parser=new JsonParser();
            JsonArray jsonArray = (JsonArray)parser.parse (readStr);
            

            //json 객체를 구글json인 gson을 이용하여 내가 원하는 VO객체에 자동으로 담는다. 이게 대봑임 ㅋㅋ. ​ VO객체에는 변수들이 getter, setter로 선언되어 있음.
            for (int i = 0; i < jsonArray.size(); i ++){
             FtpData fdVO = (FtpData) gson.fromJson(jsonArray.get(i), FtpData.class);
             log.info("################# fdVO:"+fdVO.toString());
            }
                 }
                 
                 reader.close();//버퍼 종료
          }
         }
         
         channelSftp.disconnect();//ftp종료
        
        }catch(SftpException e){
         e.printStackTrace();
        }

    }  

} 
반응형



Posted by 궁극의 java개발자
,