文档章节

ftpclient遍历目录文件,陷入死循环

moliunian
 moliunian
发布于 2016/09/26 10:55
字数 341
阅读 238
收藏 0

有个小需求,需要用到遍历ftp服务器上文件,但是ftpclient.changeWorkingDirectory()没起作用,导致递归时候无限循环。

而且坑爹的是,这个ftpclient的API出错了,不报异常,它所有的信息都包装在ftpclient.getReplayString()里面,还要开发者去调用查看。

一开始我写的时候 ftpclient.changeWorkingDirectory();没有获取它的返回值,所以一直没发现这行代码内部出错了。调用ftpclient.getReplayString()打印了下,又是常见的550代码错误,就是什么文件名,目录名语义错误。550最常见了,肯定又是编码问题。果然,对路径名转下编码,从“GBK”转“iso-8859-1”,然后就行了。

完整可以运行代码如下:

public class FTPTest {

	/**
	 *@author z.wantong
	 *@param args
	 *@since 2016-9-20 下午2:56:33
	 */
	public static void main(String[] args) {
		
		//遍历ftp目录
		FTPClient ftp = FTPClientUtil.getFTPClientInstance();
		travalDir(ftp, "/doc/");
	}
	public static void travalDir(FTPClient ftp , String ftpPath){
		
		try {
			ftpPath = new String(ftpPath.getBytes("GBK"),"iso-8859-1"); //关键是这行代码
			if(ftp.changeWorkingDirectory(ftpPath)){
				System.out.println("切换工作目录成功~");
			}else{
				System.out.print("切换工作目录失败~ ");
				System.out.println(ftp.getReplyString());
			}
            //打印时,要把编码换回来,否则乱码
			System.out.println("当前工作目录:"+ new String(ftp.printWorkingDirectory().getBytes("iso-8859-1"),"GBK"));
			FTPFile [] files = ftp.listFiles();
			for(FTPFile file : files){
				if(file.isFile()){
					System.out.println("文件是:"+file.getName());
				}else if(file.isDirectory()){
					String newPath = ftpPath+file.getName()+"/";
					System.out.println("进入目录:"+ newPath);
					travalDir(ftp, newPath);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

 

© 著作权归作者所有

moliunian

moliunian

粉丝 5
博文 94
码字总数 18224
作品 0
广州
程序员
私信 提问
记录 FTPClient 超时处理的相关问题

apache 有个开源库:commons-net,这个开源库中包括了各种基础的网络工具类,我使用了这个开源库中的 FTP 工具。 但碰到一些问题,并不是说是开源库的 bug,可能锅得算在产品头上吧,各种奇怪...

请叫我大苏
2018/11/23
0
0
linux目录无法删除?

系统:CentOS6.5 文件系统:ext4 用df -h命令发现/data/refresh_db目录被删除,因此挂载失败: ll -d /data/refresh_db ,发现目录还在: rm -rf refresh_db/尝试删除失败,提示设备busy: ls...

CyberCaaat
2018/10/22
160
3
Python爬虫——解决urlretrieve下载不完整问题且避免用时过长

在这篇博客中:http://blog.csdn.net/InnovationZ/article/details/51106601 ,作者利用递归方法解决了urlretrieve下载文件不完整的方法,其代码如下:...

jclian91
2017/08/23
0
0
Java封装ftp工具类大全

下载文件流(获取到io流文件) package com.kl.print.util; import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.i......

懿宁19931210
2018/02/23
0
0
2018-6-19bash编程之循环

我们继续将bash脚本编程,回顾一下程序的执行流程,分别为: 顺序执行选择执行循环执行 而对于循环执行来说,其分类涉及到以下几种: for, while, until 每个循环都有执行条件和退出条件,这...

谁猜谁知道
2018/06/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

import java.util.Arrays; public class Solution { public int MoreThanHalfNum_Solution(int [] array) { Arrays.sort(array); int count=0; for(int i=0;i<array.le......

南桥北木
10分钟前
0
0
关于FLAG_ACTIVITY_NEW_TASK的使用

参考文章: https://blog.csdn.net/u010389391/article/details/78558475 Context调用startActivity, 有部分情况会报出如下错误: Caused by: android.util.AndroidRuntimeException: Calli......

Gemini-Lin
25分钟前
0
0
Python开发工具:Webware for Python

原文来之:https://www.oschina.net/p/webware+for+python 前言 Webware for Python 是一组 Python 包和工具用来开发面向对象的 Web 应用。良好的设计模式,包含一个快速的应用服务器、Servl...

A_裙232550246
34分钟前
0
0
高并发场景下的缓存有哪些常见的问题?

一、缓存一致性问题 当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。 这就比较依赖缓存的过期和更新...

别打我会飞
49分钟前
3
0
List list = new ArrayList()为何父类引用指向子类对象(多态)

态:要有继承,方法的重写,父类引用指向子类对象 疑问一:父类引用指向子类对象 与指向父类对象 Animal cat = new Cat(); //向上转型。 父类引用指向子类对象,该引用不能再访问子类新增加的...

architect刘源源
50分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部