`
rain_2372
  • 浏览: 675805 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA+Ftpclient操作

    博客分类:
  • java
阅读更多
最近再做个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  用户的当前工作目录

转 http://blog.csdn.net/sonysonyok88/article/details/6156760
分享到:
评论

相关推荐

    JAVA FTPClient文件操作

    JAVA FTPClient文件操作

    Java使用Apache的FTPClient操作ftp

    Java程序使用Apache的commons-net-3.0.jar包中的org.apache.commons.net.ftp.FTPClient类实现对ftp上传、下载、删除等操作,是一个不错的东西哦

    java common FTPClient ftp sftp

    内容概要:java common来操作的ftp和sftp。读取文件、操作文件、删除文件、移动文件(文件改名)等一系列操作,只要导入依赖.txt里面的依赖,就可以直接使用,test类用来快速使用,提示都给足了,ftp的一系列操作...

    Java常用FTP文件操作说明Apache.FTPClient,ftp4j,jftp

    Java常用FTP 文件操作 说明 Apache FTPClient ftp4j jftp java中实现ftp 文件上传 文件下载

    java编写的ftpclient,用于向ftp发送、获取文件

    java编写的ftpclient,用于向ftp服务器发送、获取文件。本人亲自测试过,操作系统采用centos6.5 64位,

    java应用ftp操作文件

    最近在做ftp文件的上传与下载,基于此,整理了一下资料。本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的。。。

    springboot-ftpclient:@Service示例,用于使用Spring Boot从FTP服务器连接,上传和下载文件

    springboot-ftpclient @Service示例,用于使用Spring Boot从FTP服务器连接,上传和下载文件。 该项目实现了@Service Spring Boot,该服务启用并提供了一个简单的API,以便其他开发人员可以重用它来连接到实现FTP...

    java源码包---java 源码 大量 实例

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    Java常用FTP文件操作说明Apache.FTPClient,ftp4j,jftp.pdf

    Java常用FTP文件操作说明Apache.FTPClient,ftp4j,jftp.pdf

    java源码包4

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    java源码包3

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    java源码包2

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...

    自己收集的多个Java FTP断点续传的例子源码

    FTP操作类:FTPClient - 石川 - 博客园 (2012年5月21日) JAVA中使用FTPClient上传下载 - hbcui1984的专栏 - 博客频道 - CSDN.NET (2012年5月21日) 解决FTPClient上传文件时文件被破坏问题 - janestone的专栏 - 博客...

    JAVA上百实例源码以及开源项目源代码

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    JAVA上百实例源码以及开源项目

     Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...

    Java常用FTP文件操作说明 Apache.FTPClient,ftp4j,jftp

    NULL 博文链接:https://zmx.iteye.com/blog/674119

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java二进制IO类与文件复制操作实例 16个目标文件 内容索引:Java源码,初学实例,二进制,文件复制 Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系...

    Java检测指定FTP目录下的文件名

    本示例简单的实现了一个用Java代码来访问FTP,根据指定FTP的目录,访问这个路径下面的Ftp的文件,取出这个目录下面所有文件的文件名保存到一个Map中,最后根据系统时间和文件生成时间做对比,得出该日是否正确生成...

    FTPClient所需jar包以及上传样例代码,commons net 3.6

    JAVA操作ftp服务器,FTPClient所需要的jar包,版本号3.6,截止到2018-11-27是最新版本。里面有一个本人自己写的样例,没有工厂类等其他方法,直接一个主函数下来,简单粗暴易懂。如果需要官方提供的源码以及样例,请...

Global site tag (gtag.js) - Google Analytics