java实现FTP文件上传出现的问题

关键词java    FTP                                          

 

java实现FTP 文件上传 出现的问题
简单生活 发表于 2006-11-21 10:55:00 
        昨天用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.<init>(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)
 
 
       最后,如果大家遇到什么新的相关问题,可以在这里留言,我们来共同解决问题、学习提高。 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import sun.net.TelnetOutputStream; import sun.net.TelnetInputStream; import sun.net.ftp.FtpClient; public class ftptest { FtpClient ftpClient; private String localfilename; private String remotefilename; static String a = new String(); static int b; static String c = new String(); static String d = new String(); static String e = new String(); File aFile = new File("e:\\12\\"); String[] fileList = aFile.list(); public void connectServer(String ip, int port,String user, String password,String path) { try { ftpClient = new FtpClient(); ftpClient.openServer(ip,port); ftpClient.login(user, password); System.out.println("login success!"); if (path.length() != 0) { ftpClient.cd(path); } ftpClient.binary(); } catch (IOException ex) { System.out.println("not login"); System.out.println(ex); } } public void closeConnect() { try { ftpClient.closeServer(); System.out.println("disconnect success"); } catch (IOException ex) { System.out.println("not disconnect"); System.out.println(ex); } } public void upload() { //this.localfilename = "e://12//bb.txt"; //this.remotefilename = "bb.txt"; for(int i = 0; i<fileList.length;i++) { try { TelnetOutputStream os = ftpClient.put(fileList[i]); java.io.File file_in = new java.io.File("e://12//" + fileList[i]); FileInputStream is = new FileInputStream(file_in); byte[] bytes = new byte[1024]; int c; while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); } System.out.println("upload success"); is.close(); os.close(); } catch (IOException ex) { System.out.println("not upload"); System.out.println(ex); } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值