java ftp 上传文件 无效_java实现FTP文件上传出现的问题

昨天用JAVA写了一个实现FTP文件上传功能的类(是通过sun.net.ftp包实现的,此包为SUN的私有类包,所以官方没有提供相关API文档),然后进行了简单的测试。

具体类代码如下(此类的部分方法还未完善):

package com.tools;

import java.io.FileInputStream;

import java.io.IOException;

import sun.net.TelnetOutputStream;

import sun.net.ftp.FtpClient;

/**

* @author simplelife

* @version 1.0

*

*/

public class FtpTool{

private FtpClient ftp;

/**

* 构造方法,新建一个FtpClient对象,并打开FTP服务器

* @param host FTP服务器地址;port FTP服务端口

*

*/

public FtpTool(String host,int port)throws IOException{

ftp = new FtpClient();

ftp.openServer(host, port);

}

/**

* 登陆方法,通过用户名密码登陆到指定的FTP服务器上去,并返回欢迎信息

* @param username FTP用户名;password 密码

*

*/

public String login(String username,String password)throws IOException{

this.ftp.login(username, password);

return this.ftp.welcomeMsg;

}

/**

* 此方法用来上传文件。

* @param pathname 本地路径;filename 要上传的文件名称

*

*/

public void upload(String pathname,String filename)throws IOException{

if(!this.ftp.serverIsOpen()){

System.out.println("服务器连接不可用!");

}

this.ftp.binary();

TelnetOutputStream os = null;

FileInputStream is = null;

try {

//用ftp上传后的文件名与原文件名相同,同为filename变量内容

os = this.ftp.put(filename);

java.io.File file_in = new java.io.File(pathname+"\\"+filename);

if (file_in.length()==0) {

System.out.println("上传文件为空!");

}

is = new FileInputStream(file_in);

byte[] bytes = new byte[1024];

int c;

while ((c = is.read(bytes)) != -1) {

os.write(bytes, 0, c);

}

} finally {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

}

System.out.println("上传文件成功!");

this.ftp.ascii();

}

/**

* 此方法用来下载文件。

* @param pathname 本地路径;filename 要上传的文件名称

*

*/

public void download(String pathname,String filename)throws IOException{

}

public static void main(String[] args){

try{

FtpTool ftpt = new FtpTool("128.14.9.13",21);

String welstr = ftpt.login("xxxx", "xxxxxxxx");

System.out.println(welstr);

ftpt.upload("C:", "111.txt");

}catch(IOException ioe){

ioe.printStackTrace();

}

}

}

在测试过程中抛出一个异常,具体信息如下:

User at logged in.

sun.net.ftp.FtpProtocolException: STOR 111.txt:425 Can't build data connection: Connection timed out.

at sun.net.ftp.FtpClient.openDataConnection(Unknown Source)

at sun.net.ftp.FtpClient.put(Unknown Source)

at com.tools.FtpTool.upload(FtpTool.java:56)

at com.tools.FtpTool.main(FtpTool.java:94)

抛出此异常的具体表现为:在FTP服务器上已经创建了该文件,但文件大小为0。在网上搜索相关异常描述也很少,经过仔细分析发现,此问题与FTP客户端防火墙有关。然后我关闭防火墙软件,再进行测试,一切OK!

在网上也发现另一个常见异常,我将它重现并做说明。其主要原因是很多FTP服务没有使用默认端口,在代码实现中,连接端口不正确所导致异常出现的。

sun.net.ftp.FtpProtocolException: Welcome message: ??$

at sun.net.ftp.FtpClient.openServer(Unknown Source)

at com.tools.FtpTool.(FtpTool.java:29)

at com.tools.FtpTool.main(FtpTool.java:91)

第三种异常就是由于FTP服务器端的FTP服务没有开启,连接被拒绝所导致的。具体异常如下:

java.net.ConnectException: Connection refused: connect

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.PlainSocketImpl.doConnect(Unknown Source)

at java.net.PlainSocketImpl.connectToAddress(Unknown Source)

at java.net.PlainSocketImpl.connect(Unknown Source)

最后,如果大家遇到什么新的相关问题,可以在这里留言,我们来共同解决问题、学习提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值