注意:

Access restriction: The type FtpClient is not accessible due to restriction on required library F:\Program Files\Java\jre6\lib\rt.jar

sun.net包里的内容,在eclipse/myeclipse里默认是不让用的。解决办法是自定义access rules

工程上右键->工程属性->java builder path->Libraries标签,点击JRE System Library里面的Access rules,add sun/** 为accessible,如果该项存在,就edit。然后选择workspace default jre(jdk1.6.0_18)package com.suma.exchange.ftp;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import java.util.StringTokenizer;

import sun.net.TelnetInputStream;

import sun.net.TelnetOutputStream;

import sun.net.ftp.FtpClient;

/**

* ftp上传,下载

* @author why 2009-07-30

*

*/

public class FtpUtil {

private String ip = "";

private String username = "";

private String password = "";

private int port = -1;

private String path = "";

FtpClient ftpClient = null;

OutputStream os = null;

FileInputStream is = null;

public FtpUtil(String serverIP, String username, String password) {

this.ip = serverIP;

this.username = username;

this.password = password;

}

public FtpUtil(String serverIP, int port, String username, String password) {

this.ip = serverIP;

this.username = username;

this.password = password;

this.port = port;

}

/**

* 连接ftp服务器

*

* @throws IOException

*/

public boolean connectServer(){

ftpClient = new FtpClient();

try {

if(this.port != -1){

ftpClient.openServer(this.ip,this.port);

}else{

ftpClient.openServer(this.ip);

}

ftpClient.login(this.username, this.password);

if (this.path.length() != 0){

ftpClient.cd(this.path);// path是ftp服务下主目录的子目录

}

ftpClient.binary();// 用2进制上传、下载

System.out.println("已登录到\"" + ftpClient.pwd() + "\"目录");

return true;

}catch (IOException e){

e.printStackTrace();

return false;

}

}

/**

* 断开与ftp服务器连接

*

* @throws IOException

*/

public boolean closeServer(){

try{

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

if (ftpClient != null) {

ftpClient.closeServer();

}

System.out.println("已从服务器断开");

return true;

}catch(IOException e){

e.printStackTrace();

return false;

}

}

/**

* 检查文件夹在当前目录下是否存在

* @param dir

* @return

*/

private boolean isDirExist(String dir){

String pwd = "";

try {

pwd = ftpClient.pwd();

ftpClient.cd(dir);

ftpClient.cd(pwd);

}catch(Exception e){

return false;

}

return true;

}

/**

* 在当前目录下创建文件夹

* @param dir

* @return

* @throws Exception

*/

private boolean createDir(String dir){

try{

ftpClient.ascii();

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

s.countTokens();

String pathName = ftpClient.pwd();

while(s.hasMoreElements()){

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

try {

ftpClient.sendServer("MKD " + pathName + "\r\n");

} catch (Exception e) {

e = null;

return false;

}

ftpClient.readServerResponse();

}

ftpClient.binary();

return true;

}catch (IOException e1){

e1.printStackTrace();

return false;

}

}

/**

* ftp上传

* 如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换

*

* @param filename 要上传的文件(或文件夹)名

* @return

* @throws Exception

*/

public boolean upload(String filename){

String newname = "";

if(filename.indexOf("/") > -1){

newname = filename.substring(filename.lastIndexOf("/") + 1);

}else{

newname = filename;

}

return upload(filename, newname);

}

/**

* ftp上传

* 如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换

*

* @param fileName 要上传的文件(或文件夹)名

* @param newName 服务器段要生成的文件(或文件夹)名

* @return

*/

public boolean upload(String fileName, String newName){

try{

String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");

File file_in = new File(savefilename);//打开本地待长传的文件

if(!file_in.exists()){

throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");

}

if(file_in.isDirectory()){

upload(file_in.getPath(),newName,ftpClient.pwd());

}else{

uploadFile(file_in.getPath(),newName);

}

if(is != null){

is.close();

}

if(os != null){

os.close();

}

return true;

}catch(Exception e){

e.printStackTrace();

System.err.println("Exception e in Ftp upload(): " + e.toString());

return false;

}finally{

try{

if(is != null){

is.close();

}

if(os != null){

os.close();

}

}catch(IOException e){

e.printStackTrace();

}

}

}

/**

* 真正用于上传的方法

* @param fileName

* @param newName

* @param path

* @throws Exception

*/

private void upload(String fileName, String newName,String path) throws Exception{

String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");

File file_in = new File(savefilename);//打开本地待长传的文件

if(!file_in.exists()){

throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");

}

if(file_in.isDirectory()){

if(!isDirExist(newName)){

createDir(newName);

}

ftpClient.cd(newName);

File sourceFile[] = file_in.listFiles();

for(int i = 0; i < sourceFile.length; i++){

if(!sourceFile[i].exists()){

continue;

}

if(sourceFile[i].isDirectory()){

this.upload(sourceFile[i].getPath(),sourceFile[i].getName(),path+"/"+newName);

}else{

this.uploadFile(sourceFile[i].getPath(),sourceFile[i].getName());

}

}

}else{

uploadFile(file_in.getPath(),newName);

}

ftpClient.cd(path);

}

/**

* upload 上传文件

*

* @param filename 要上传的文件名

* @param newname 上传后的新文件名

* @return -1 文件不存在 >=0 成功上传,返回文件的大小

* @throws Exception

*/

public long uploadFile(String filename, String newname) throws Exception{

long result = 0;

TelnetOutputStream os = null;

FileInputStream is = null;

try {

java.io.File file_in = new java.io.File(filename);

if(!file_in.exists())

return -1;

os = ftpClient.put(newname);

result = file_in.length();

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();

}

}

return result;

}

/**

* 从ftp下载文件到本地

*

* @param filename 服务器上的文件名

* @param newfilename 本地生成的文件名

* @return

* @throws Exception

*/

public long downloadFile(String filename, String newfilename){

long result = 0;

TelnetInputStream is = null;

FileOutputStream os = null;

try{

is = ftpClient.get(filename);

java.io.File outfile = new java.io.File(newfilename);

os = new FileOutputStream(outfile);

byte[] bytes = new byte[1024];

int c;

while ((c = is.read(bytes)) != -1) {

os.write(bytes, 0, c);

result = result + c;

}

}catch (IOException e){

e.printStackTrace();

}finally{

try {

if(is != null){

is.close();

}

if(os != null){

os.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return result;

}

/**

* 取得相对于当前连接目录的某个目录下所有文件列表

*

* @param path

* @return

*/

public List getFileList(String path){

List list = new ArrayList();

DataInputStream dis;

try {

dis = new DataInputStream(ftpClient.nameList(this.path + path));

String filename = "";

while((filename = dis.readLine()) != null){

list.add(filename);

}

} catch (IOException e) {

e.printStackTrace();

}

return list;

}

public static void main(String[] args){

FtpUtil ftp = new FtpUtil("133.224.202.2","tstbill","tstbill");

ftp.connectServer();

boolean result = ftp.upload("C:/test_why", "test_why/test");

System.out.println(result?"上传成功!":"上传失败!");

List list = ftp.getFileList("test_why/test");

for(int i=0;i

String name = list.get(i).toString();

System.out.println(name);

}

ftp.closeServer();

/**

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命令_Java实现FTP相关推荐

  1. linux下ftp命令输出日志,ftp中/var/log/xferlog日志解析及ftp常用命令常用

    在vsftpd.conf中有如下内容定义了日志的记录方式: ##表明FTP服务器记录上传下载的情况 xferlog_enable=YES ##表明将记录的上传下载情况写在xferlog_file所指定 ...

  2. java ftp服务器_Java实现FTP服务器功能实例代码

    FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议.在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Downl ...

  3. java操作文件_java操作FTP,实现文件上传下载删除操作

    上传文件到FTP服务器: /** * Description: 向FTP服务器上传文件 * @param url FTP服务器hostname * @param port FTP服务器端口,如果默认端 ...

  4. linux下常用FTP命令 1. 连接ftp服务器

    1. 连接ftp服务器 格式:ftp [hostname| ip-address] a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密 ...

  5. linux下常用FTP命令 1 连接ftp服务器

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 1. 连 ...

  6. 常用FTP命令 1. 连接ftp服务器

    1. 连接ftp服务器 格式:ftp [hostname| ip-address] a)在linux命令行下输入: ftp 192.168.1.1 b)服务器询问你用户名和密码,分别输入用户名和相应密 ...

  7. linux使用ftp传递文件,linux ftp命令:(从远程ftp服务器上传下载文件)

    FTP的命令行格式为: ftp -v -d -i -n -g [主机名] ,其中 -v 显示远程服务器的所有响应信息: -n 限制ftp的自动登录,即不使用:.n etrc文件: -d 使用调试方式: ...

  8. java version命令_java -version命令报错如何解决

    java -version命令报错如何解决 发布时间:2020-10-22 12:45:25 来源:亿速云 阅读:77 作者:小新 这篇文章主要介绍java -version命令报错如何解决,文中介绍 ...

  9. JAVA 实现FTP功能_Java实现FTP上传下载功能

    public classFtp {private static final Logger logger = Logger.getLogger(FTP.class);/*** FTP客户端*/ priv ...

最新文章

  1. 自定义Android注解Part3:绑定
  2. 关于CE端口线路整改的建议
  3. x window的奥秘
  4. Android各种报错问题汇总
  5. SAP推出iPhone手机端企业智能管理应用
  6. 数组|leetcode209.长度最小的子数组
  7. 阿里云 AI 编辑部获 CCBN 创新奖,传媒行业解决方案背后的黑科技
  8. ubuntu 中 ROS 一些报错的解决
  9. 【Python爬虫】股票数据定向爬虫
  10. leetcode 1189 python
  11. eclipse导入maven项目
  12. SpUtil多样加密存储,兼容android9.0
  13. 怎样计算机翼升力大小,飞机的升力系数如何计算
  14. 蒲公英wifi怎么卸载干净_蒲公英WiFi广告怎么彻底删除
  15. 【黑马程序员pink老师前端】CSS
  16. IOS 实现植物大战僵尸
  17. plm软件试用测试报告,ANSYS 15.0系列测试报告——FLUENT Meshing 15.0
  18. 笔记本电脑直接开热点(在连接了wifi的情况下)
  19. 线程专用钩子和全局钩子的差别
  20. 金蝶EAS取消组织隔离

热门文章

  1. 搜狗浏览器打不开网页的解决方法
  2. 如何使用计算机自动筛选功能,2009计算机一级:Excel自动筛选小技巧
  3. 应用层常见协议——知识点
  4. Python机器学习及实践——简介篇3(逻辑回归)
  5. input 限制长度
  6. UE4入门学习笔记(一)准备设计数据的优化处理
  7. Hi3536音频单声道改双声道
  8. 信息检索的基本方法:构造检索式
  9. python小游戏 五子棋小游戏设计与实现
  10. 【HDOJ】1003 Max Sum_天涯浪子_新浪博客