有详细说明的FTP使用sun.net.ftp包下的api,

package jing.upfile;

import sun.net.ftp.*;

import sun.net.*;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.ByteArrayOutputStream;

import java.util.ArrayList;

import java.util.StringTokenizer;

/**

FTP远程命令列表

USER    PORT    RETR    ALLO    DELE    SITE    XMKD    CDUP    FEAT

PASS    PASV    STOR    REST    CWD     STAT    RMD     XCUP    OPTS

ACCT    TYPE    APPE    RNFR    XCWD    HELP    XRMD    STOU    AUTH

REIN    STRU    SMNT    RNTO    LIST    NOOP    PWD     SIZE    PBSZ

QUIT    MODE    SYST    ABOR    NLST    MKD     XPWD    MDTM    PROT

在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n

ftpclient.sendServer("XMKD /test/bb\r\n"); //执行服务器上的FTP命令

ftpclient.readServerResponse一定要在sendServer后调用

nameList("/test")获取指目录下的文件列表

XMKD建立目录,当目录存在的情况下再次创建目录时报错

XRMD删除目录

DELE删除文件

*

Title: 使用JAVA操作FTP服务器(FTP客户端)

*

Description: 上传文件的类型及文件大小都放到调用此类的方法中去检测,比如放到前台JAVASCRIPT中去检测等

* 针对FTP中的所有调用使用到文件名的地方请使用完整的路径名(绝对路径开始)。

*

*

Copyright: Copyright (c) 2005

*

Company: 静靖工作室

* @author 欧朝敬  13873195792

* @version 1.0

*/

public class FtpUpfile {

private FtpClient ftpclient;

private String ipAddress;

private int ipPort;

private String userName;

private String PassWord;

/**

* 构造函数

* @param ip String 机器IP

* @param port String 机器FTP端口号

* @param username String FTP用户名

* @param password String FTP密码

* @throws Exception

*/

public FtpUpfile(String ip, int port, String username, String password) throws

Exception {

ipAddress = new String(ip);

ipPort = port;

ftpclient = new FtpClient(ipAddress, ipPort);

//ftpclient = new FtpClient(ipAddress);

userName = new String(username);

PassWord = new String(password);

}

/**

* 构造函数

* @param ip String 机器IP,默认端口为21

* @param username String FTP用户名

* @param password String FTP密码

* @throws Exception

*/

public FtpUpfile(String ip, String username, String password) throws

Exception {

ipAddress = new String(ip);

ipPort = 21;

ftpclient = new FtpClient(ipAddress, ipPort);

//ftpclient = new FtpClient(ipAddress);

userName = new String(username);

PassWord = new String(password);

}

/**

* 登录FTP服务器

* @throws Exception

*/

public void login() throws Exception {

ftpclient.login(userName, PassWord);

}

/**

* 退出FTP服务器

* @throws Exception

*/

public void logout() throws Exception {

//用ftpclient.closeServer()断开FTP出错时用下更语句退出

ftpclient.sendServer("QUIT\r\n");

int reply = ftpclient.readServerResponse(); //取得服务器的返回信息

}

/**

* 在FTP服务器上建立指定的目录,当目录已经存在的情下不会影响目录下的文件,这样用以判断FTP

* 上传文件时保证目录的存在目录格式必须以"/"根目录开头

* @param pathList String

* @throws Exception

*/

public void buildList(String pathList) throws Exception {

ftpclient.ascii();

StringTokenizer s = new StringTokenizer(pathList, "/"); //sign

int count = s.countTokens();

String pathName = "";

while (s.hasMoreElements()) {

pathName = pathName + "/" + (String) s.nextElement();

try {

ftpclient.sendServer("XMKD " + pathName + "\r\n");

} catch (Exception e) {

e = null;

}

int reply = ftpclient.readServerResponse();

}

ftpclient.binary();

}

/**

* 取得指定目录下的所有文件名,不包括目录名称

* 分析nameList得到的输入流中的数,得到指定目录下的所有文件名

* @param fullPath String

* @return ArrayList

* @throws Exception

*/

public ArrayList fileNames(String fullPath) throws Exception {

ftpclient.ascii(); //注意,使用字符模式

TelnetInputStream list = ftpclient.nameList(fullPath);

byte[] names = new byte[2048];

int bufsize = 0;

bufsize = list.read(names, 0, names.length); //从流中读取

list.close();

ArrayList namesList = new ArrayList();

int i = 0;

int j = 0;

while (i < bufsize /*names.length*/) {

//char bc = (char) names;

//System.out.println(i + "  " + bc + " : " + (int) names);

//i = i + 1;

if (names== 10) { //字符模式为10,二进制模式为13

//文件名在数据中开始下标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1

//System.out.write(names, j, i - j);

//System.out.println(j + "   " + i + "    " + (i - j));

String tempName = new String(names, j, i - j);

namesList.add(tempName);

//System.out.println(temp);

// 处理代码处

//j = i + 2; //上一次位置二进制模式

j = i + 1; //上一次位置字符模式

}

i = i + 1;

}

return namesList;

}

/**

* 上传文件到FTP服务器,destination路径以FTP服务器的"/"开始,带文件名、

* 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖

* @param source String

* @param destination String

* @throws Exception

*/

public void upFile(String source, String destination) throws Exception {

buildList(destination.substring(0, destination.lastIndexOf("/")));

ftpclient.binary(); //此行代码必须放在buildList之后

TelnetOutputStream ftpOut = ftpclient.put(destination);

TelnetInputStream ftpIn = new TelnetInputStream(new

FileInputStream(source), true);

byte[] buf = new byte[204800];

int bufsize = 0;

while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {

ftpOut.write(buf, 0, bufsize);

}

ftpIn.close();

ftpOut.close();

}

/**

* JSP中的流上传到FTP服务器,

* 上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖

* 字节数组做为文件的输入流,此方法适用于JSP中通过

* request输入流来直接上传文件在RequestUpload类中调用了此方法,

* destination路径以FTP服务器的"/"开始,带文件名

* @param sourceData byte[]

* @param destination String

* @throws Exception

*/

public void upFile(byte[] sourceData, String destination) throws Exception {

buildList(destination.substring(0, destination.lastIndexOf("/")));

ftpclient.binary(); //此行代码必须放在buildList之后

TelnetOutputStream ftpOut = ftpclient.put(destination);

ftpOut.write(sourceData, 0, sourceData.length);

//        ftpOut.flush();

ftpOut.close();

}

/**

* 从FTP文件服务器上下载文件SourceFileName,到本地destinationFileName

* 所有的文件名中都要求包括完整的路径名在内

* @param SourceFileName String

* @param destinationFileName String

* @throws Exception

*/

public void downFile(String SourceFileName, String destinationFileName) throws

Exception {

ftpclient.binary(); //一定要使用二进制模式

TelnetInputStream ftpIn = ftpclient.get(SourceFileName);

byte[] buf = new byte[204800];

int bufsize = 0;

FileOutputStream ftpOut = new FileOutputStream(destinationFileName);

while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {

ftpOut.write(buf, 0, bufsize);

}

ftpOut.close();

ftpIn.close();

}

/**

*从FTP文件服务器上下载文件,输出到字节数组中

* @param SourceFileName String

* @return byte[]

* @throws Exception

*/

public byte[] downFile(String SourceFileName) throws

Exception {

ftpclient.binary(); //一定要使用二进制模式

TelnetInputStream ftpIn = ftpclient.get(SourceFileName);

ByteArrayOutputStream byteOut = new ByteArrayOutputStream();

byte[] buf = new byte[204800];

int bufsize = 0;

while ((bufsize = ftpIn.read(buf, 0, buf.length)) != -1) {

byteOut.write(buf, 0, bufsize);

}

byte[] return_arraybyte = byteOut.toByteArray();

byteOut.close();

ftpIn.close();

return return_arraybyte;

}

/**调用示例

* FtpUpfile fUp = new FtpUpfile("192.168.0.1", 21, "admin", "admin");

* fUp.login();

* fUp.buildList("/adfadsg/sfsdfd/cc");

* String destination = "/test.zip";

* fUp.upFile("C:\\Documents and Settings\\Administrator\\My Documents\\sample.zip",destination);

* ArrayList filename = fUp.fileNames("/");

* for (int i = 0; i < filename.size(); i++) {

*     System.out.println(filename.get(i).toString());

* }

* fUp.logout();

* @param args String[]

* @throws Exception

*/

public static void main(String[] args) throws Exception {

FtpUpfile fUp = new FtpUpfile("192.150.189.22", 21, "admin", "admin");

fUp.login();

/*        fUp.buildList("/adfadsg/sfsdfd/cc");

String destination = "/test/SetupDJ.rar";

fUp.upFile(

"C:\\Documents and Settings\\Administrator\\My Documents\\SetupDJ.rar",

destination);

ArrayList filename = fUp.fileNames("/");

for (int i = 0; i < filename.size(); i++) {

System.out.println(filename.get(i).toString());

}

fUp.downFile("/sample.zip", "d:\\sample.zip");

*/

FileInputStream fin = new FileInputStream(

"C:\\AAA.TXT");

byte[] data = new byte[20480];

fin.read(data, 0, data.length);

fUp.upFile(data, "/test/BBB.exe");

fUp.logout();

System.out.println("程序运行完成!");

/*FTP远程命令列表

USER    PORT    RETR    ALLO    DELE    SITE    XMKD    CDUP    FEAT

PASS    PASV    STOR    REST    CWD     STAT    RMD     XCUP    OPTS

ACCT    TYPE    APPE    RNFR    XCWD    HELP    XRMD    STOU    AUTH

REIN    STRU    SMNT    RNTO    LIST    NOOP    PWD     SIZE    PBSZ

QUIT    MODE    SYST    ABOR    NLST    MKD     XPWD    MDTM    PROT

*/

/*在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n

ftpclient.sendServer("XMKD /test/bb\r\n"); //执行服务器上的FTP命令

ftpclient.readServerResponse一定要在sendServer后调用

nameList("/test")获取指目录下的文件列表

XMKD建立目录,当目录存在的情况下再次创建目录时报错

XRMD删除目录

DELE删除文件

*/

}

}

java ftp client_JAVA FTP CLIENT相关推荐

  1. java socket client_java socket client

    用tornado做了个socket server.无奈联调的人员对接不上. 于是撸出了以下demo import java.io.*; import java.net.*; public class ...

  2. java中实现ftp.pdf

    1.sun.net import sun.net.ftp.*; import sun.net.*; import java.io.FileInputStream; import java.io.Fil ...

  3. -【Java FTP及FTP服务器搭建】

    -[Java FTP及FTP服务器搭建] 一:本文采用apache项目组的 Apache Commons Net™ library 项目地址:http://commons.apache.org/net ...

  4. java代码ftp重命名未生效_java使用apache commons连接ftp修改ftp文件名失败原因

    今天被ftp上中文名修改坑了好久 项目用的是 apache commons 里的 FtpClient 实现的对ftp文件的上传下载操作,今天增加了业务要修改ftp上的文件名,然后就一直的报错,问题是它 ...

  5. java循环读取ftp服务器上面的文件

    公司新项目需要在ftp服务器上读取文件保存到数据库,所以学习了一下怎么读取 项目采用的是springboot框架,首先需要在pom文件中加入comment.net jar包依赖 <!-- 读取f ...

  6. C#毕业设计——基于C#+asp.net+FTP的FTP客户端设计与实现(毕业论文+程序源码)——FTP客户端

    基于C#+asp.net+FTP的FTP客户端设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于C#+asp.net+FTP的FTP客户端设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

  7. FileZilla FTP Server FTP over TLS settings 设置FTP服务器证书启用FTPS 【转载】

    FileZilla FTP Server FTP over TLS settings 设置FTP服务器证书,绑定TLS证书启用FTPS访问,还可以强制客户端使用FTPS加密协议访问FTP服务器禁止未加 ...

  8. FTP错误 [ftp: connect: No route to host] 解决方法

    FTP错误 [ftp: connect: No route to host] 解决方法 参考文章: (1)FTP错误 [ftp: connect: No route to host] 解决方法 (2) ...

  9. Elasticsearch Java Low Level REST Client(通用配置)

    Elasticsearch Java Low Level REST Client(通用配置) 通用配置 正如初始化中所解释的,RestClientBuilder支持提供RequestConfigCal ...

最新文章

  1. Oracle正则表达式匹配中文的问题
  2. 皮一皮:追忆我那随风逝去的阔腿裤...
  3. linux删去分区的文件夹,如何恢复 Linux 分区下误删的文件?
  4. SpringMVC异常处理机制-异常处理两种方式
  5. 计算机如何去除桌面名称阴影,电脑桌面图标有阴影怎么去掉 电脑桌面图标阴影去掉方法【图文】...
  6. 算法导论8.3-4习题解答(基数排序)
  7. Day9 深度学习入门
  8. 我读《数据库系统基础教程》
  9. 什么是A*(Astar)算法?(简单叙述)
  10. 一款针对中小型酒店设计的管理系统,源码分享
  11. java doc 文件转pdf_Java中Word转PDF解决方案
  12. WebVirtMgr + KVM 环境中的 Linux 虚拟机部署
  13. dede php 输出html,DedeCMS系统,后台模板生成HTML页面时,不能解析dede标签,直接输出dede标签乱码的问题。...
  14. vrchat模型房_vrchat人物模型 1.0 官方版
  15. 2021-07-16 转载 - UmiJS应用框架
  16. 朗涛任命Juanita Zhang为中国大陆区总经理,Peggy Hon为中国香港区总经理
  17. JS图片img旋转、放大、缩小
  18. python numpy.arry, pytorch.Tensor及原生python中list相互转换
  19. 细说字体 Sans Serif 与 Serif
  20. hadoop发行商介绍:Hortonworks

热门文章

  1. python使用matplotlib中的errorbar函数可视化误差条、并自定义数据点标记、数据点大小、数据点颜色、数据点边缘颜色、误差棒颜色、误差棒线条宽度、误差棒边界线长度、误差棒边界线厚度等
  2. R语言广义线性模型函数GLM、glm函数构建泊松回归模型、模型中存在过离散(Overdispersion)、则将连接函数从possion函数替换为quasipoisson函数重新构建泊松回归模型
  3. R语言常用sys函数汇总:sys.chmod、Sys.Date、Sys.time、Sys.getenv、Sys.getlocale、sys.getpid、sys.glob、sys.info等
  4. Pandas把dataframe的索引、复合索引变换为数据列:包含单索引到单列(重命名)、复合索引到多数据列、复合索引的其中一个水平变换为数据列、
  5. python和R文件IO操作对比及dataframe创建方式对比:read_csv、to_csv、write.csv、 data.frame、pd.DataFrame
  6. oracle最大实例数,【Oracle】RAC的多实例数据迁移至单机的多实例。
  7. Centos安装g++错误 :No package g++ available
  8. Java语言程序设计(基础篇)第七章(2 18 34)
  9. 论文解读 Combating Adversarial Misspellings with Robust Word Recognition
  10. jupyter notebook 内核好像挂掉了