下载ftp服务器文件。

下载ftp服务器文件

public StringBuilder downLoadFTPFile(String hostName,int port,String userName,String password,String remotePath,String fileName){
        InputStream is = null;
        BufferedReader br = null;
        try {
            //连接ftp服务器
            ftpClient.connect(hostName,21);
            ftpClient.login(userName,password);
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                ftpClient.disconnect();
                System.out.println("连接失败,失败code是:" + ftpClient.getReplyCode() + "\n失败描述是:" + ftpClient.getReplyString());
            }
            //设置服务器下的文件路径。
            boolean hasRemote = ftpClient.changeWorkingDirectory(remotePath);
            if (!hasRemote){
                System.out.println("进入ftp目录失败。");
            }
            System.out.println("-----hostName:" + hostName + "---userName:" + userName + "---password" + password
                    + "---remotePath:" + remotePath + "---fileName:" + fileName);
            //获取文件输入流
            is = ftpClient.retrieveFileStream(fileName);
            System.out.println("文件输入流是:"+ is);
            br = new BufferedReader(new InputStreamReader(is,"UTF-8"));

            String line;
            while ((line = br.readLine()) != null){
                //读取数据
                sbResult.append(line + "\n");
                System.out.println("每一行的数据内容是:" + sbResult);
            }
            ftpClient.logout();

        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("连接门户ftp获取文件失败,失败原因:" + e.getMessage());
        }finally {
            if (ftpClient.isConnected()){
                try {
                    ftpClient.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

pom文件中添加

		<dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.3</version>
        </dependency>

解析的时候可以按行截取。

好了本来到这里已经结束了,连自己的阿里云服务器是没有什么问题的。
但是上了公司的测试服务器以后(因为调的是其他厂家的ftp服务,所以可能跟自己的云服务器配置不一样。),一直报ftp response 421 server close connect。
各种查问题,各种找资料,我尝试直接在虚机使用

ftp ip + 端口

命令去直接获取文件

get 文件名称

可以拿到,获取到的是二进制的数据
在这里插入图片描述
然后就想到了把获取文件设置为二进制。
代码如下

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

结果还是不行。
然后网上查需要设置成被动模式
代码如下

ftpClient.enterLocalPassiveMode();

然后还是不行,这下就陷入了沉思,死活通不了。这么个破东西搞了一个多礼拜。最后发现原因是因为我是在连接登录前设置的二进制文件,最后放到连接和登录之后就好了。简直要气炸。故记录一下,有时间去看源码为什么回这样。

ftpClient.connect(hostName,port);
ftpClient.login(userName,password);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值