Apache FTPClient 匿名登录上传下载数据

package com.test.main;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.SocketException;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;


public class ListFtpFile {
 
    private FTPClient ftpClient = new FTPClient();
 
    private OutputStream outSteam = null;
 
    /**
     * ftp服务器地址
     */
    private String hostName = "192.168.1.109";
    private int port = 21;
 
    /**
     * 登录名
     */
    private String userName = "anonymous";//匿名登录,空字符串不行
    /**
     * 登录密码
     */
    private String password = "121@hotmail.com";//随便一个地址
 
    /**
     * 需要访问的远程目录
     */
    private String remoteDir = "/lxq/";
 
    /**
     * 下载
     */
    private void download() {
        try {
            // 链接到ftp服务器
            ftpClient.connect(hostName,port);
            System.out.println("连接到ftp服务器:" + hostName + " 成功..开始登录");
            // 登录.用户名 密码
            boolean b = ftpClient.login(userName, password);
            System.out.println("登录成功." + b);
             
//          检测连接是否成功
            int reply = ftpClient.getReplyCode();
            if(!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();
                System.err.println("FTP server refused connection.");
                System.exit(1);
            }
             
            ftpClient.setControlEncoding("GBK");
            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT); 
            conf.setServerLanguageCode("zh");
            FTPFile[] remoteFiles = ftpClient.listFiles(remoteDir);
            if (remoteFiles != null) {
                for (int i = 0; i < remoteFiles.length; i++) {
                    String name = remoteFiles[i].getName();

                    //下载
                    File localFile = new File("e:/practice/ftpdownload/" + name);
                    OutputStream is = new FileOutputStream(localFile);
                    //retrieveFile的第一个参数需要是 ISO-8859-1 编码,并且必须是完整路径!
                    String fileName = remoteDir + name;
                    ftpClient.retrieveFile(new String(fileName.getBytes("GBK"),"ISO-8859-1"), is);
                    is.close();

                    //打印
                    long length = remoteFiles[i].getSize();
                    String readableLength = FileUtils.byteCountToDisplaySize(length);
                    System.out.println(name + ":\t"+remoteFiles[i].isFile()+"\t" + readableLength);
                     
                }
            }
 
            ftpClient.logout();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(outSteam);
            try {
                ftpClient.disconnect();
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
    }
     
    /**
     * 上传
     * */
    public void upload(){
        String srcUrl = "e:/practice/ftpupload/(2013.06.27)(cwb)安之畅资料.doc";
        String targetFileName = "安之畅资料.doc";
        try {
            ftpClient.connect(hostName,port);
            boolean b = ftpClient.login(userName, password);
            // 检测连接是否成功
            int reply = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();
                System.err.println("FTP server refused connection.");
                System.exit(1);
            }
             
            ftpClient.setControlEncoding("GBK");
            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT); 
            conf.setServerLanguageCode("zh");
             
            File srcFile = new File(srcUrl);
            FileInputStream fis = null;
            fis = new FileInputStream(srcFile);
 
            // 设置上传目录
            ftpClient.changeWorkingDirectory(remoteDir);
            ftpClient.setBufferSize(1024);
            ftpClient.setControlEncoding("GBK");
 
            // 设置文件类型(二进制)
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            // 上传
            b = ftpClient.storeFile(targetFileName, fis);
            IOUtils.closeQuietly(fis);

            /*boolean bool = ftpClient.changeWorkingDirectory("/NC");
            System.out.println("changeWorkingDirectory="+bool);
            bool = ftpClient.makeDirectory("/NC");
            System.out.println("makeDirectory="+bool);*/

            ftpClient.logout();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                ftpClient.disconnect();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
         
    }
 
    /**
     * 测试
     * */
    public static void main(String[] args) {
        ListFtpFile listFtpfiles = new ListFtpFile();
        listFtpfiles.download();
        listFtpfiles.upload();
    }
}


用到的jar包有:

commons-io-2.4.jar和commons-net-3.3.jar

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值