자바 리 눅 스 서버 원 격 연결 및 명령 실행 및 파일 업로드 기능
이 연결 방법 은 병렬 문 제 를 고려 하여 FTP 연결 을 만 들 때 모든 연결 대상 을 저장 합 니 다.
ThreadLocal
package com.test.utils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class Ftp {
// log
private static final Log logger = LogFactory.getLog(Ftp.class);
private static Date last_push_date = null;
private Session sshSession;
private ChannelSftp channel;
private static ThreadLocal<Ftp> sftpLocal = new ThreadLocal<Ftp>();
private Ftp(String host, int port, String username, String password) throws Exception {
JSch jsch = new JSch();
jsch.getSession(username, host, port);
// , , session
sshSession = jsch.getSession(username, host, port);
sshSession.setPassword(password);
// /etc/ssh/sshd_config GSSAPIAuthentication yes no,
sshSession.setConfig("userauth.gssapi-with-mic", "no");
// session properties, yes
sshSession.setConfig("StrictHostKeyChecking", "no");
sshSession.connect();
// sftp
channel = (ChannelSftp)sshSession.openChannel("sftp");
channel.connect();
logger.info(" ftp !" + sshSession);
}
/**
*
*
* @return
*/
private boolean isConnected() {
return null != channel && channel.isConnected();
}
/**
* sftp
*
* @return
* @throws Exception
*/
public static Ftp getSftpUtil(String host, int port, String username, String password) throws Exception {
//
Ftp sftpUtil = sftpLocal.get();
if (null == sftpUtil || !sftpUtil.isConnected()) {
// ,
sftpLocal.set(new Ftp(host, port, username, password));
}
return sftpLocal.get();
}
/**
* sftp
*/
public static void release() {
if (null != sftpLocal.get()) {
sftpLocal.get().closeChannel();
logger.info(" " + sftpLocal.get().sshSession);
sftpLocal.set(null);
}
}
/**
*
*
* @throws Exception
*/
public void closeChannel() {
if (null != channel) {
try {
channel.disconnect();
} catch (Exception e) {
logger.error(" SFTP :", e);
}
}
if (null != sshSession) {
try {
sshSession.disconnect();
} catch (Exception e) {
logger.error("SFTP session :", e);
}
}
}
/**
* @param directory ftp
* @param uploadFile
*
*/
public void upload(String directory, String uploadFile) throws Exception {
try {<br> // ls
channel.ls(directory);<br> // cd
channel.cd(directory);
List<File> files = getFiles(uploadFile, new ArrayList<File>());
for (int i = 0; i < files.size(); i++) {
File file = files.get(i);
InputStream input = new BufferedInputStream(new FileInputStream(file));
channel.put(input, file.getName());
try {
if (input != null) input.close();
} catch (Exception e) {
e.printStackTrace();
logger.error(file.getName() + " ..... !" + e.getMessage());
}
if (file.exists()) {
boolean b = file.delete();
logger.info(file.getName() + " ! :" + b);
}
}
}catch (Exception e) {
logger.error("【 】:",e);
//
channel.mkdir(directory);
}
}
//
public List<File> getFiles(String realpath, List<File> files) {
File realFile = new File(realpath);
if (realFile.isDirectory()) {
File[] subfiles = realFile.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
if (null == last_push_date ) {
return true;
} else {
long modifyDate = file.lastModified();
return modifyDate > last_push_date.getTime();
}
}
});
for (File file : subfiles) {
if (file.isDirectory()) {
getFiles(file.getAbsolutePath(), files);
} else {
files.add(file);
}
if (null == last_push_date) {
last_push_date = new Date(file.lastModified());
} else {
long modifyDate = file.lastModified();
if (modifyDate > last_push_date.getTime()) {
last_push_date = new Date(modifyDate);
}
}
}
}
return files;
}
}
총결산위 에서 말 한 것 은 소 편 이 소개 한 자바 원 격 으로 리 눅 스 서버 를 연결 하고 명령 을 수행 하 며 파일 을 업로드 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.