• java ftp文件上传sftp文件上传


    	
    		commons-net
    		commons-net
    		3.6
    	
    
    	
    	
    		com.jcraft
    		jsch
    		0.1.54
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    ftp:

    import org.apache.commons.net.ftp.FTPClient;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class FtpTest {
    
        public static void main(String[] args) {
            ftpUploadFile("192.168.1.129", 21, "root", "123456",
                    "D:\\test-ftp.txt",
                    "/usr/soft");
        }
        /**
         * ftp上传单个文件
         *
         * @param hostname       服务器地址
         * @param port           端口号
         * @param username       用户名
         * @param password       密码
         * @param uploadFilePath 上传文件路径(包括文件名)
         * @param destPath       ftp上传目录
         */
        public static void ftpUploadFile(String hostname, int port, String username, String password, String uploadFilePath, String destPath) {
    
            System.out.println("准备连接到ftp");
            try {
                FTPClient ftp = new FTPClient();
                //连接
                ftp.connect(hostname, port);
                //登录
                boolean loginS = ftp.login(username, password);
                if (!loginS) {
                    System.out.println("ftp登录失败,用户名或密码错误");
                    return;
                } else {
                    System.out.println("ftp登录成功");
                }
                // 获取本地文件并上传
                String file = uploadFilePath;
                FileInputStream input = new FileInputStream(file);
                ftp.changeWorkingDirectory(destPath);//跳转目录
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//必须要设置以二进制的方式传输文件
                ftp.enterLocalPassiveMode();//被动模式
                file = new String(file.getBytes("GBK"), "iso-8859-1");
    
                if (!ftp.storeFile(new File(file).getName(), input)) {
                    System.out.println("失败,服务器返回:" + ftp.getReplyString());//获取上传失败的原因
                } else {
                    System.out.println("文件:" + new File(file).getName() + " 上传成功");
                }
                input.close();
                ftp.logout();
            } catch (IOException e) {
                e.printStackTrace();
                System.out.println("ftp连接失败");
            }
        }
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    sftp:

    import com.jcraft.jsch.ChannelSftp;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.JSchException;
    import com.jcraft.jsch.SftpException;
    
    import java.io.*;
    import java.util.Properties;
    import java.util.Vector;
    
    public class SfptTest {
        public static void main(String[] args) {
    
            uploadFile("D:\\test-ftp.txt",
                    "/usr/soft/",
                    "root", "123456",
                    "192.168.1.130", 22);
        }
        
        /**
         * @param filePath 文件全路径
         * @param ftpPath  上传到目的端目录
         * @param username
         * @param password
         * @param host
         * @param port
         */
        public static void uploadFile(String filePath, String ftpPath, String username, String password, String host, Integer port) {
            FileInputStream input = null;
            ChannelSftp sftp = null;
            try {
                JSch jsch = new JSch();
                //获取session  账号-ip-端口
                com.jcraft.jsch.Session sshSession = jsch.getSession(username, host, port);
                //添加密码
                sshSession.setPassword(password);
                Properties sshConfig = new Properties();
                //严格主机密钥检查
                sshConfig.put("StrictHostKeyChecking", "no");
                sshSession.setConfig(sshConfig);
                //开启session连接
                sshSession.connect();
                //获取sftp通道
                sftp = (ChannelSftp) sshSession.openChannel("sftp");
                //开启
                sftp.connect();
                //文件乱码处理
                /*Class c = ChannelSftp.class;
                Field f = c.getDeclaredField("server_version");
                f.setAccessible(true);
                f.set(sftp, 2);
                sftp.setFilenameEncoding("GBK");*/
                //判断目录是否存在
                try {
                    Vector ls = sftp.ls(ftpPath); //ls()得到指定目录下的文件列表
                    /*if (ls == null) {   //ls不会为null,哪怕它是一个空目录
                        sftp.mkdir(ftpPath);
                    }*/
                } catch (SftpException e) {
                    sftp.mkdir(ftpPath);
                }
                sftp.cd(ftpPath);
                String filename = filePath.substring(filePath.lastIndexOf(File.separator) + 1); //附件名字
                //filename = new String(filename.getBytes("GBK"), StandardCharsets.ISO_8859_1);
                input = new FileInputStream(new File(filePath));
                sftp.put(input, filename);
                //设定777权限,转为8进制放入chmod中
                //sftp.chmod(Integer.parseInt("777", 8), ftpPath + filename);
                input.close();
                sftp.disconnect();
                sshSession.disconnect();
                System.out.println("================上传成功!==================");
            } catch (Exception e) {
                System.out.println("================上传失败!==================");
                e.printStackTrace();
            }
        }
    
        /**
         * @param directory    SFTP服务器的文件路径
         * @param downloadFile SFTP服务器上的文件名
         * @param saveFile     保存到本地路径
         * @param username
         * @param password
         * @param host
         * @param port
         */
        public static void downloadFile(String directory, String downloadFile, String saveFile, String username, String password, String host, Integer port) throws JSchException, IOException {
            ChannelSftp sftp = null;
            try {
                JSch jsch = new JSch();
                //获取session  账号-ip-端口
                com.jcraft.jsch.Session sshSession = jsch.getSession(username, host, port);
                //添加密码
                sshSession.setPassword(password);
                Properties sshConfig = new Properties();
                //严格主机密钥检查
                sshConfig.put("StrictHostKeyChecking", "no");
                sshSession.setConfig(sshConfig);
                //开启session连接
                sshSession.connect();
                //获取sftp通道
                sftp = (ChannelSftp) sshSession.openChannel("sftp");
                //开启
                sftp.connect();
                if (directory != null && !"".equals(directory)) {
                    sftp.cd(directory);
                }
                FileOutputStream output = new FileOutputStream(new File(saveFile));
                sftp.get(downloadFile, output);
                output.close();
                sftp.disconnect();
                sshSession.disconnect();
                System.out.println("================下载成功!==================");
            } catch (SftpException | FileNotFoundException | JSchException e) {
                System.out.println("文件下载异常!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
  • 相关阅读:
    VMware虚拟机linux无法使用ifconfig的解决方法
    SpringSecurityOauth实现鉴权-动态权限
    SAP 系统License查看申请及导入
    51单片机学习:ADC模数转换实验--热敏电阻AD采集
    Redis——Jedis中zset类型使用
    8.字符串转换整数(atoi)
    【2023集创赛】安谋科技杯二等奖作品: 智能体感游戏机
    【Redis】理论进阶篇------浅谈Redis的缓存穿透和雪崩原理
    正则表达式常见的应用场景
    化工&python | CSTR连续搅拌反应器系统
  • 原文地址:https://blog.csdn.net/jiachanghui007/article/details/133255961