JAVA+Ftpclient操作

原创 2011年01月21日 13:17:00

最近再做个ftp上传、下载的项目,用到的包是sun.net.ftp.FtpClient。本地开发测试一切正常,放到服

务器测试,程序开始罢工。无奈之下,只能逐步输出日志,查找原因,现做个小结。
环境:
本地的开发环境是win7+jdk1.5,另本地搭建一个ftp服务器,软件使用的是serv_U。
服务器上的环境是linux+jdk1.5.

经过分析发现,linux环境与win环境的ftp操作有以下差别:
1、文件中的数据回车换行符不同
win的回车换行时:/r/n
linux的回车换行是:/n
解决办法是:
1)由于unix和windows系统参数的差别,故不使用硬编码进行换行,通过使用System.getProperties

("line.separator");获取换行符
2)也可通过使用out.newLine();实现

2、ftp的根路径不同
加入:ftp用户名:user,密码:11111
根目录:win:c://upload;linux:/data/upload
子目录:win:c://upload/abc;linux:/data/upload/abc
win系统中,以ftp的用户名和密码登陆后,可直接进入cd(/abc),即可进入到abc目录
但是,在linux系统中,以ftp的用户名和密码登陆后,需要cd完整的路径才可以进入目录,即:cd(/data

/upload/abc),不可使用cd(/abc)。

所以,要注意linux系统的文件操作时要完整的绝对路径,而不能使用相对路径。
3、问题总结:
由该问题可延伸至操作系统常用参数的差别,如:
line.separator(windows:"/r/n";unix:"/n");
file.separator(windows:"/";unix:"/");
path.separator(windows:";";unix:":");

4、 FTP的ASCII和Binary两种传输方式有何不同

    ASCII模式和Binary模式的区别是回车换行的处理,Binary模式不对数据进行任何处理,ASCII模式将

回车换行转换为本机的回车字符,比如:UNIX下是/n,Windows下是/r/n,Mac下是/r。
    ASCII模式下会转换文件,不能说是不同系统对回车换行解释不同,而是不同的系统有不同的行结束符

。UNIX系统下行结束符是一个字节,即十六进制的0A,而Windows的系统是两个字节,即十六进制的0D0A,

所以当你用ASCII方式从UNIX的FTP Server下载文件到Windows系统上时(不管是二进制或者文本文件),每

检测到一个字节是0A,就会自动插入一个0D,所以如果你的文件是二进制文件,比如可执行文件、压缩包

什么的,就肯定不能用了。如果你的文件就是UNIX下的文本文件,你用ASCII模式是正确的,要是误用了

Binary模式,你在Windows上看这个文件是没有换行的,里面是一个个的黑方块,也就是当你的文件是文本

文件时,建议使用ASCII模式,这样可以使用得不同的平台传上去的文件到另一平台时能正确显示换行情况

,而对于可执行文件或压缩文件等其它非文本文件,最好用Binary方式,因为这个传上去的和本机的一模

一样,只要你在同一个平台上就可以打开它,或都你将你的FTP服务器放在UNIX平台上,而用户使用

windows平台,那么上传上去的非文本文件,用户只要下载到windows平台一般就可以打开它。
    一般来说,我们最好都用Binary方式,这样可以保证不出错。如果有文本格式转换的问题,即UNIX格

式的文本和DOS格式的文本之间的转换,有很多工具可以做的,不要在ftp传输的时候冒险,尤其是你如果

对这些东西不是非常清楚的话。


PS:java的System.getProperty()方法可以获取的值:

java.version  Java 运行时环境版本

java.vendor  Java 运行时环境供应商

java.vendor.url  Java 供应商的 URL

java.home  Java 安装目录

java.vm.specification.version  Java 虚拟机规范版本

java.vm.specification.vendor  Java 虚拟机规范供应商

java.vm.specification.name  Java 虚拟机规范名称

java.vm.version  Java 虚拟机实现版本

java.vm.vendor  Java 虚拟机实现供应商

java.vm.name  Java 虚拟机实现名称

java.specification.version  Java 运行时环境规范版本

java.specification.vendor  Java 运行时环境规范供应商

java.specification.name  Java 运行时环境规范名称

java.class.version  Java 类格式版本号

java.class.path  Java 类路径

java.library.path  加载库时搜索的路径列表  7款发型秀出完美脸型

java.io.tmpdir  默认的临时文件路径

java.compiler  要使用的 JIT 编译器的名称

java.ext.dirs  一个或多个扩展目录的路径

os.name  操作系统的名称

os.arch  操作系统的架构

os.version  操作系统的版本

file.separator  文件分隔符(在 UNIX 系统中是“/”)

path.separator  路径分隔符(在 UNIX 系统中是“:”)

line.separator  行分隔符(在 UNIX 系统中是“/n”)

user.name  用户的账户名称

user.home  用户的主目录

user.dir  用户的当前工作目录

 

形态学开操作与闭操作

开操作是先腐蚀再膨胀,闭操作是先膨胀再腐蚀。主要应用在二值图像上。 目的:开操作可以平滑物体轮廓,断开狭窄的间断和消除细小的突出物。           闭操作可以消弭狭窄的间断,消除小的孔...
  • water_93
  • water_93
  • 2016年03月11日 22:15
  • 4557

图像处理之开操作详解

开操作概述: 图像处理中的开闭运算是两个非常重要的数学形态学操作,它们同时都继承自基本的腐蚀与 膨胀操作,这些操作一般都会应用在二值图像的分析与处理上。开操作有点像腐蚀操作,主 要是会remov...
  • jia20003
  • jia20003
  • 2012年07月01日 19:11
  • 10246

[学习opencv]图像腐蚀、膨胀、开闭操作

#include "cv.h" #include "highgui.h" using namespace cv; int main(int argc, char* argv[]) { ...
  • u010417185
  • u010417185
  • 2016年10月13日 09:49
  • 1052

关于p操作和v操作的理解

操作系统之PV操作 今天在做操作系统老师布置的操作系统作业,但是碰到了一个有关pv操作的问题,由于对pv操作的理解不是很透彻,所以我查阅了很多资料,下面来简单的通俗的介绍一下pv操作 1、信号量 ...
  • code_AC
  • code_AC
  • 2016年11月08日 20:20
  • 3273

Opencv--形态学图像处理--膨胀与腐蚀,开操作与闭操作

opencv 膨胀与腐蚀,开操作与闭操作
  • l740450789
  • l740450789
  • 2015年08月05日 12:00
  • 3102

二值图像--形态学处理3 开操作和闭操作

学习DIP第13天 开篇废话     其实说实话,所谓开操作和闭操作就是把腐蚀和膨胀结合起来,先腐蚀后膨胀就是开,膨胀后腐蚀就是关,至于为什么是开为什么是关,我一开始也记不住,记得老师好像也没告诉我为...
  • TonyShengTan
  • TonyShengTan
  • 2014年12月26日 14:46
  • 6615

使用Spring AOP使用注解记录用户操作日志

1.自定义注解,记录操作日志 1.自定义注解 package com.jay.demo3.aop1.myannotation; import java.lang.annotation.Docum...
  • he90227
  • he90227
  • 2015年03月10日 14:57
  • 12283

【JavaScript】使用jQuery操作DOM

本章需要掌握的技能目标 1、使用jQuery操作css样式。 2、使用jQuery操作文本与属性值内容 3、使用jQuery操作DOM节点 4、使用jQuery遍历DOM节点 5、使用jQuery操作...
  • mjianglei
  • mjianglei
  • 2016年11月26日 22:43
  • 848

PV操作--题目解析 (赞)

感觉概念理解的差不多了,试着做一两道题,来看看是否真的明白,以及还有什么地方不明白的.   下面都是软考真题,之前看它的时候,我是一点也不会,只巴望着我软考的时候不要考啊.现在我看看有没有一点点思...
  • jindao909
  • jindao909
  • 2016年02月29日 21:29
  • 876

WCF之“有零个操作;协定必须至少有一个操作”

今天在进行WCF宿主中“OpenHost”突然出现异常,异常信息如下:ContractDescription“***”有零个操作;协定必须至少有一个操作。英文类似:ContractDescriptio...
  • showjancn
  • showjancn
  • 2011年01月10日 17:36
  • 2495
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA+Ftpclient操作
举报原因:
原因补充:

(最多只允许输入30个字)