FileZilla设置被动模式及java代码实现

发布时间:2024年01月25日

1、FileZilla设置

在这里插入图片描述

2、java代码实现

package src;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class TestFTPClient
{
    public static void main(String[] args) throws Exception
    {
        FTPClient ftp = new FTPClient();
        ftp.setConnectTimeout(30000);
        ftp.setDataTimeout(30000);
        // 连接服务器
        ftp.connect("1.1.1.1", 1025);
        int reply = ftp.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply))
        {
            ftp.disconnect();
            System.out.println("** 无法连接至FTP服务器!");
            System.exit(1);
        }
        if (!ftp.login("abc", "abc***"))
        {
            ftp.logout();
            System.out.println("** 错误的用户名或密码!");
            System.exit(1);
        }
        System.out.println("Connected.");
        // 字节传输 BINARY_FILE_TYPE
        // 文本传输 ASCII_FILE_TYPE
        // 一般使用BINARY模式来传输文件,很少使用 ASCII_FILE_TYPE
        ftp.setFileType(FTP.BINARY_FILE_TYPE);
        // 主动模式: enterLocalActiveMode()
        // 被动模式: enterLocalPassiveMode()
        // 一般选择被动模式
        ftp.enterLocalPassiveMode();
        // 设置控制通道的字符集, 要与服务端的设定一致
        ftp.setControlEncoding("UTF-8");


        // 列出所有的文件/子目录
        listFile(ftp);
        //上传一个文件
//        upload(ftp);
        // 下载一个文件
//        download(ftp);
        ftp.logout();
        ftp.disconnect();
        System.out.println("Quit.");
    }

    // 上传一个文件
    public static void upload(FTPClient ftp)
    {
        File localFile = new File("D:\\test121.txt");
        InputStream inStream;
        OutputStream outStream;
        try
        {
            String remotePath = ftpPath(localFile.getName());
            inStream = new FileInputStream(localFile);
            //
            // 小文件直接 用
            // ftp.storeFile(remotePath, inStream);
            //大文件时用这个方法
            outStream = ftp.storeFileStream(remotePath);
            // 大文件,可以自己掌握进度
            byte[] buffer = new byte[4000];
            while (true)
            {
                int n = inStream.read(buffer);
                if (n <= 0)
                    break;
                outStream.write(buffer, 0, n);
            }
            inStream.close();
            outStream.close();
        } catch (FileNotFoundException e1)
        {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void listFile(FTPClient ftp)
    {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("> list");
        FTPFile[] ftpFiles;
        try
        {
            ftpFiles = ftp.listFiles();
            for (FTPFile f : ftpFiles)
            {
                String time = sdf.format(f.getTimestamp().getTime());
                String info = "";
                if (f.isDirectory())
                    info = String.format("+ %-20s", f.getName());
                else
                    info = String.format("  %-20s %8d   %s", f.getName(), f.getSize(), time);
                System.out.println(info);
            }
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    // API里对中文FTP目录的处理有点问题
    // 在调用 changeWorkingDirectory() / listFiles()等方法时,将参数路径转换一下
    public static String ftpPath(String path)
    {
        try
        {
            return new String(path.getBytes("UTF-8"), FTP.DEFAULT_CONTROL_ENCODING);
        } catch (UnsupportedEncodingException e)
        {
            return "";
        }
    }

    //文件下载
    public static void download(FTPClient ftp) throws Exception
    {
        File localFile = new File("D:/tmp/copy.zip");
        localFile.getParentFile().mkdirs();
        //
        String remotePath = ftpPath("/HBiuder.zip");
        OutputStream outStream = new FileOutputStream(localFile);
        // 小文件直接 用
        // ftp.retrieveFile(remotePath, outStream);
        // 大文件,可以自己掌握进度
        InputStream inStream = ftp.retrieveFileStream(remotePath);
        if(inStream == null)
            throw new Exception("远程文件不存在!" + remotePath);
        byte[] buffer = new byte[4000];
        while(true)
        {
            int n =inStream.read(buffer);
            if(n <= 0) break;
            outStream.write(buffer,0,n);
        }
        inStream.close();
        outStream.close();
    }
}

文章来源:https://blog.csdn.net/taotao_guiwang/article/details/135827335
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。