import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Properties;
/**
* @oauth: qiangSW
* @date: 2020/5/19 8:52
* @description: com.integral.test
* @doc:
*/
public class SFTPConneaction {
/*远程机 登录信息*/
private static final String userName = "root";
private static final String passWord = "SXDXyfzx_FTP123";
private static final String url = "127.0.0.1";
private static final int port = 22;
/*远程机目录*/
private static final String remoteDirectory = "/home/ftpdata/yfpd";
/*本地机目录*/
private static final String localDirectory = "/etl/CRMBCC/othersystem/yingfu/zhangshangzhuangwei";
/*文件移动目录*/
private static final String directoryHis = "/etl/CRMBCC/othersystem/yingfu/zhangshangzhuangwei_his";
private static Session session;
private static ChannelSftp sftp;
public static void main(String[] args) {
String priFileName = "yxd_day_";
StringBuffer fileName = new StringBuffer(priFileName);
String yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd").format(LocalDateTime.now());
fileName.append(yyyyMMdd).append(".txt");
File file = new File(localDirectory);
File[] files = file.listFiles();
File getFile = null;
for (File each : files) {
/*匹配上传得文件*/
if (fileName.toString().equals(each.getName())) {
getFile = each;
}
}
String yyyyMMddHHmmss = DateTimeFormatter.ofPattern("yyyyMMddHHmmss").format(LocalDateTime.now());
StringBuffer newFile = new StringBuffer(priFileName);
newFile.append(yyyyMMddHHmmss).append(".txt");
if (null != getFile) {
/*空文件直接移动其他目录*/
if (getFile.length() == 0) {
getFile.renameTo(new File(directoryHis, newFile.toString()));
return;
}
InputStream inputStream = null;
try {
conectionSftp();
sftp.cd(remoteDirectory);
inputStream = new FileInputStream(getFile);
sftp.put(inputStream, getFile.getName());
closeSftp();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != inputStream) {
try {
/* 这个位置必须 关闭要关闭 不然无法将文件 一定到其他目录*/
inputStream.close();
} catch (Exception e) {
throw new RuntimeException("inputStream close fial", e);
}
}
}
/*移动文件*/
if (getFile.exists()) {
boolean b = getFile.renameTo(new File(directoryHis, newFile.toString()));
if (b) {
System.out.println("文件移动成功");
} else {
System.out.println("文件移动失败");
}
}
}
}
/*链接 sftp*/
public static void conectionSftp() throws Exception {
JSch jSch = new JSch();
session = jSch.getSession(userName, url, port);
session.setPassword(passWord);
Properties properties = new Properties();
properties.setProperty("StrictHostKeyChecking", "no");
session.setConfig(properties);
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
System.out.println("sftp 链接成功");
sftp = (ChannelSftp) channel;
}
/*关闭sftp 目录*/
public static void closeSftp() {
if (null != sftp) {
if (sftp.isConnected()) {
sftp.disconnect();
}
}
if (null != session) {
if (session.isConnected()) {
session.disconnect();
}
}
System.out.println("sftp 链接关闭");
}
}
maven:
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>