ftp下载问题 就这么点可用分了

neverJava 2012-03-01 10:52:14
1.功能: 需要实现ftp下载的一个小功能。

2.问题: 能连接上ftp服务器,但不能下载,也不报错。

3.试过的办法: 首先在dos下用ftp命令下载,可以下载,没有问题。
然后用相同的代码去下载其他ftp服务器的文件,也可以下载,没有问题。

4.具体代码:

package ftp2;


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;



/**

* 使用commons的net包进行ftp链接. 相关包:commons-net-1.4.1.jar ;

* commons-io-1.2.jar;jakarta-oro-2.0.8.jar测试通过.可以列出ftp上的文件

* 通过把ftp服务器上的文件流连接到outSteam及可以把文件下载到本机的目录..限制如果目录为中文则需要处理.最好使用英文文件名

*

*/

public class ListFtpFile {



private FTPClient ftpClient = new FTPClient();


private OutputStream outSteam = null;



/**

* ftp服务器地址

*/

private String hostName = "192.168.5.1";

private int port = 21;



/**

* 登录名

*/

private String userName = "yy";//匿名登录,空字符串不行



/**

* 登录密码

*/

private String password = "yy_123456";//随便一个地址,我胡乱写一个也可以运行的



/**

* 需要访问的远程目录

*/

private String remoteDir ="export/home/omc/netnumen/ems/ums-server/works/topo/topo1/runtime/ppus/uca.ppu/uca-mml.pmu/mmloutputfiles/";




/**

* 下载

*/

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);//1.这个参数传的是不是ftp服务器的系统,如果是,怀疑有问题,服务器的系统是sun的。

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("c:/001/ftp/" + 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 static void main(String[] args) {

ListFtpFile listFtpfiles = new ListFtpFile();

listFtpfiles.download();

}

}


...全文
180 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
neverJava 2012-03-02
  • 打赏
  • 举报
回复
是系统的问题,好用的时候连的服务器都是xp,连UNIX系统就不行。求连接unix系统代码
桃园闲人 2012-03-01
  • 打赏
  • 举报
回复
代码都不能格式划一下!就这点代码,打个断点一步步向下走,很快就能定位。
LFDream 2012-03-01
  • 打赏
  • 举报
回复
我觉得是不是FTP服务器文件的路径你没写对。
neverJava 2012-03-01
  • 打赏
  • 举报
回复
不是红色注释处参数的问题
neverJava 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 peng_hao1988 的回复:]
代码都不能格式划一下!就这点代码,打个断点一步步向下走,很快就能定位。
[/Quote]


没有任何地方报错,除了下面这段返回的数组长度为0之外,一切正常
走到 FTPFile[] remoteFiles = ftpClient.listFiles(remoteDir);



neverJava 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lifei879306004 的回复:]
我觉得是不是FTP服务器文件的路径你没写对。
[/Quote]

不是路径的问题,同样的路径用dos下的命令就能下载

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧