zoukankan      html  css  js  c++  java
  • java使用ftp上传下载

    1. java使用ftp上传下载

    1.1. 生成known_hosts文件

    ssh-keyscan -H -t rsa 120.79.167.88 >> known_hosts
    

    1.2. JSch方式

    1.2.1. Maven 配置

    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.55</version>
    </dependency>
    

    1.2.2. 配置Jsch

    JSch 支持密码或公共密钥认证访问远程服务器。下面的示例采用密码认证:

    private ChannelSftp setupJsch() throws JSchException {  
        JSch jsch = new JSch();  
        jsch.setKnownHosts("C:/Users/5161/Desktop/known_hosts");  //前面生成好的文件
        Session jschSession = jsch.getSession("root", "120.79.167.xxx");//username,host
        jschSession.setPassword("123456");//密码就是服务器登录密码
        jschSession.connect();  
        return (ChannelSftp) jschSession.openChannel("sftp");  
    }
    

    1.2.3. 使用Jsch上传文件

    @Test
    public void whenUploadFileUsingJsch_thenSuccess() throws JSchException, SftpException {
        ChannelSftp channelSftp = setupJsch();
        channelSftp.connect();
        String localFile = "C:/Users/5161/Desktop/java开发工程师_阳浩_137-5585-4643.pdf";
        String remoteDir = "/data/";
        channelSftp.put(localFile, remoteDir + "137-5585-4643.pdf");
        channelSftp.exit();
    }
    

    1.2.4. 使用Jsch下载文件

    @Test
    public void whenDownloadFileUsingJsch_thenSuccess() throws JSchException, SftpException {
        ChannelSftp channelSftp = setupJsch();
        channelSftp.connect();
        String remoteFile = "/data/137-5585-4643.pdf";
        String localDir = "D:/";
        channelSftp.get(remoteFile, localDir + "137-5585-4643.pdf");
        channelSftp.exit();
    }
    

    1.2.5. 文件保存地址

    1.3. SSHJ方式

    1.3.1. Maven 配置

    <dependency>
        <groupId>com.hierynomus</groupId>
        <artifactId>sshj</artifactId>
        <version>0.27.0</version>
    </dependency>
    

    1.3.2. 配置 SSHJ

    SSHJ 同样支持密码或公共密钥认证访问远程服务器。下面的示例采用密码认证:

    private SSHClient setupSshj() throws IOException {
        SSHClient client = new SSHClient();
        client.addHostKeyVerifier(new PromiscuousVerifier());
        client.connect("120.79.167.xxx");
        client.authPassword("root", "123456");
        return client;
    }
    

    1.3.3. 使用 SSHJ 上传文件

    @Test
    public void whenUploadFileUsingSshj_thenSuccess() throws IOException {
        SSHClient sshClient = setupSshj();
        SFTPClient sftpClient = sshClient.newSFTPClient();
        sftpClient.put("C:/Users/5161/Desktop/java开发工程师_阳浩_137-5585-4643.pdf", "/data/" + "137-5585-0001.pdf");
        sftpClient.close();
        sshClient.disconnect();
    }
    

    1.3.4. 使用 SSHJ 下载文件

    @Test
    public void whenDownloadFileUsingSshj_thenSuccess() throws IOException {
        SSHClient sshClient = setupSshj();
        SFTPClient sftpClient = sshClient.newSFTPClient();
        sftpClient.get("/data/137-5585-0001.pdf", "d:/" + "137-5585-0001.pdf");
        sftpClient.close();
        sshClient.disconnect();
    }
    

    1.3.5. 文件保存地址

    1.4. Apache Commons VFS

    1.4.1. Maven 配置

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-vfs2</artifactId>
        <version>2.4</version>
    </dependency>
    

    1.4.2. 使用 Apache Commons VFS 下载文件

    Apache Commons VFS 的用法略有不同。
    用FileSystemManager为目标文件创建 FileObjects 对象,然后发送。
    在这个示例中,调用 FileObject.copyFrom() 上传文件。

    /*存储在/root/下*/
    @Test
    public void whenUploadFileUsingVfs_thenSuccess() throws IOException {
        FileSystemManager manager = VFS.getManager();
        System.out.println(System.getProperty("user.dir"));
    //        FileObject local = manager.resolveFile(System.getProperty("user.dir") + "/" + "d:/137-5585-0001.pdf");
        FileObject local = manager.resolveFile( "d:\137-5585-0001.pdf");
        FileObject remote = manager.resolveFile(
                "sftp://" + "root" + ":" + "123456" + "@" + "120.79.167.xxx" + "/" + "/data/" + "137-5585-0002.pdf");
        remote.copyFrom(local, Selectors.SELECT_SELF);
        local.close();
        remote.close();
    }
    

    注意:本地文件应该使用绝对路径,远程文件路径应该以 sftp://username:password@remoteHost 开始。

    1.4.3. 使用 Apache Commons VFS 下载文件

    从远程服务器上下载文件用法类似,还是用 FileObject.copyFrom() 从 remoteFile 拷贝到 localFile

    @Test
    public void whenDownloadFileUsingApacheVfs_thenSuccess() throws IOException {
        FileSystemManager manager = VFS.getManager();
        FileObject local = manager.resolveFile("d:/137-5585-00012.pdf");
        FileObject remote = manager.resolveFile("sftp://" + "root" + ":" + "123456" + "@" + "120.79.167.xxx" + "/" + "/data/137-5585-0002.pdf");
        local.copyFrom(remote, Selectors.SELECT_SELF);
        local.close();
        remote.close();
    }
    

    1.4.4. 文件保存地址

    程序yuan
  • 相关阅读:
    改变UITabbar顶部分割线颜色
    UITableViewCell添加点击时改变字体的颜色、背景、图标
    【转】有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
    AFNetworking https自签名证书 -1012 解决方案
    关于AFNetWorking 2.5.4之后版本编译报错问题解决方案
    UIImageView 使图片圆形的方法
    关于使用IQKeyBoardManager键盘还是被遮挡的问题解决方案
    关于ios7 以上版本 view被导航栏遮挡的问题 解决方案
    手动导入第三方工程/类库
    “请不要直接访问超全局$_GET数组”
  • 原文地址:https://www.cnblogs.com/ooyhao/p/11297338.html
Copyright © 2011-2022 走看看