Java使用apache的FTPClient上传下载文件

1.连接

    public static FTPClient client_ = new FTPClient();
    public static FTPClient client2_ = new FTPClient();
    
    static {
        try {
            client_.connect("xx.xx.xx.xx", 21);
            client_.login("anonymous", "lfq");
            client_.setConnectTimeout(0);
            client_.enterLocalPassiveMode();
            client_.setControlEncoding("UTF-8");
            client_.setFileType(FTPClient.BINARY_FILE_TYPE);

            client2_.connect("xx.xx.xx.xx", 21);
            client2_.login("username", "password");
            client2_.setConnectTimeout(0);
            client2_.enterLocalPassiveMode();
            client2_.setControlEncoding("UTF-8");
            client2_.setFileType(FTPClient.BINARY_FILE_TYPE);
            //切换到目的路径
            client2_.changeWorkingDirectory("path");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
	其中login中的两个参数是用户名密码,如果没有相应配置可以使用"anonymous",代表匿名登录,密码任意

2.传输文件

//这段代码是将服务器c1对应的path文件传输到连接c2是指定的路径下,以filename重命名文件
 public void transFile(FTPClient c1, FTPClient c2, String path, String filename) throws IOException {
 		//下载path对应的文件流
        InputStream inputStream = c1.retrieveFileStream(path);
        //创建目标路径的输出流
        OutputStream outputStream = c2.storeFileStream(filename);
        
        //util是apache提供的工具类位于包org.apache.commons.net.io下,提供了一些copy和close的操作
        Util.copyStream(inputStream, outputStream, 1024 * 16);
        Util.closeQuietly(inputStream);
        Util.closeQuietly(outputStream);
        client_.disconnect();
        client2_.disconnect();
    }

3.可能出现的问题

socket read error

	如果频繁下载上传文件,可能会由于服务器配置策略或者其他网络原因,导致retrieveFileStream返回的inputStream 为null,
在我尝试了其他博主给出的解决办法后,依然会有此问题。
	最后我索性尝试最笨办法----每次下载完文件后断开连接,重新下载时再重新连接即可!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值