昨天用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)

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

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

  1. java ftp下载文件 慢_java实现ftp文件上传下载,解决慢,中文乱码,多个文件下载等问题...

    标签: //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,Str ...

  2. java web文件夹_JAVA WEB项目文件夹上传下载解决方案

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  3. java文件上传控件_java实现大文件上传控件

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  4. java代码ftp重命名未生效_java实现FTP远程文件移动(重命名、复制、拷贝) | 学步园...

    首先就标题说明一点,java使用org.apache.commons.net.ftp.ftpclient包来操作FTP是很爽滴,但对远程文件操作,好像没有实现 复制文件的方法.我用的是文件移动(mov ...

  5. java ftp读取文件内容_java读取ftp中TXT文件的案例

    最近在开发关于java读取ftp中TXT文件,其中有些坑踩了一下,再次做个记录 1.读取文件时我会根据文件名称去生成数据库表,oracle数据库对于表名的长度是有限制的,最多30个字符 2.对于多个文 ...

  6. java读取 info.plist源码_Java 解析 IPA 文件,读取 Info.plist 信息-Go语言中文社区

    在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manife ...

  7. Java pdf文件传输_java中pdf文件的管理(pdf文件转png文件,base64传输文件以及删除)...

    org.apache.pdfbox pdfbox 2.0.12 影像文件转为base64编码使用java自带的BASE64Encoder类 代码部分: 前端上传文件的保存: @RequestMappi ...

  8. java 读取大文件内容_java读取大文件

    java一般读取文件时,将文件文内容全部加在到内存,然后读取,但是这种读取方式很明显不适合读取大文件,在进行大文件处理时,考虑到内存有限,采用分次读取的方式. java分次读取文件内容有三种方式, 1 ...

  9. java实现视频文件转换为flv(带文件缩略图)_java实现视频文件转换为flv(带文件缩略图)...

    在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...

最新文章

  1. 剑指offer:面试题09. 用两个栈实现队列
  2. bzoj2339[HNOI2011]卡农 dp+容斥
  3. CSS3之利用选择器和content属性在页面中插入内容
  4. 统一建模语言UML轻松入门系列
  5. sklearn中cross_validation包无法使用
  6. Shell脚本中$0、$?、$!、$$、$*、$#、$@
  7. Java获取当前日期的前一个月,前一天的时间
  8. Javascript中call函数和apply函数的使用
  9. spring.factories 的妙用
  10. C4996    'fopen': This function or variable may be unsafe
  11. C语言判断点是否在矩阵内
  12. 安卓python安装库_如何快速在安卓上搭建python3环境
  13. 【数据结构】3、模拟银行窗口排队叫号系统——C++
  14. Android常用的几种对话框
  15. matlab 门限回归模型,门限回归及Stata操作汇总与空间门槛回归模型简介
  16. Android主界面退出再次进入略过欢迎面
  17. 树莓派系统安装和调试
  18. 了解 Tornado 框架
  19. matlab 纵向的虚线,纵向减速标记符号中间是虚线可以变道吗
  20. STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 开启UART7串口功能

热门文章

  1. css伪类选择器,:link、:visited、:focus、:hover、:active、:first-child
  2. matlab2c使用c++实现matlab函数系列教程-cat函数
  3. 使用Git将本地文件夹同步至github
  4. Warning: The TensorFlow library wasn't compiled to use SSE,SSE2,SSE3,SSE4.1 instructions
  5. Quartus中Tools->Netlist Viewers->RTL Viewer
  6. [诗歌]个人作诗集锦
  7. java中利用正则表达式获取a标签
  8. 基于观察者模式——创建显示天气数据
  9. docker+MySQL+读写分离
  10. 第一次个人项目【词频统计】——PSP表格