JAVA sftp单个文件上传

本文详细介绍了使用Java的JSch库进行SFTP文件传输的方法,包括建立连接、上传文件及移动本地文件等操作流程,提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值