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

Java实现FTP服务器的上传、下载、删除、查看文件列表

 
阅读更多

package com.zhangjun.ftp;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

/**
* <p>
* ftp连接管理(使用apache commons-net-1.4.1 lib)
* </p>
*/
public class FtpClientUtil {
private FTPClient ftpClient = null;
private String server;
private int port;
private String userName;
private String userPassword;

public static void main(String[] args) {
// 调用FTP传输g
// FtpClientUtil f = new FtpClientUtil("10.50.20.8", 21, "suzy",
// "123456");
// FtpClientUtil f = new FtpClientUtil("10.7.4.56",21,"root","wonder");
FtpClientUtil f = new FtpClientUtil("10.3.128.178", 21, "lujf", "lu517jf");
// FtpClientUtil f = new
// FtpClientUtil("10.50.20.213",21,"Administrator","administrator");
try {
if (f.open()) {

// f.getFtpClient().sendServer("quote PASV");

// f.getFtpClient().sendServer("quote PORT");

// f.mkDir("put2/5/6\\8\\9");
// f.mkDir("test6\\7/8/9");
// f.mkDir("test6/7/8/9");
// f.mkDir("test7");
//f.put("d:/1.txt", "中国.txt", "put3/测试/6\\8\\9");// 远程路径为相对路径
f.get("/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/qunarlog.txt", "E:/111111111.txt");// 远程路径为相对路径
f.close();

}
} catch (Exception e) {

e.printStackTrace();
}
}

public FtpClientUtil(String server, int port, String userName,
String userPassword) {
this.server = server;
this.port = port;
this.userName = userName;
this.userPassword = userPassword;
}

/**
* 链接到服务器
*
* @return
* @throws Exception
*/
public boolean open() {
if (ftpClient != null && ftpClient.isConnected()) {
return true;
}
try {
ftpClient = new FTPClient();
// 连接
ftpClient.connect(this.server, this.port);
ftpClient.login(this.userName, this.userPassword);
// 检测连接是否成功
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
this.close();
System.err.println("FTP server refused connection.");
System.exit(1);
}
System.out.println("open FTP success:" + this.server+";port:"+this.port + ";name:"
+ this.userName + ";pwd:" + this.userPassword);
ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE); // 设置上传模式.binally
// or ascii
return true;
} catch (Exception ex) {
// 关闭
this.close();
ex.printStackTrace();
return false;
}

}

private boolean cd(String dir) throws IOException {
if (ftpClient.changeWorkingDirectory(dir)) {
return true;
} else {
return false;
}
}

/**
* 获取目录下所有的文件名称
*
* @param filePath
* @return
* @throws IOException
*/

private FTPFile[] getFileList(String filePath) throws IOException {
FTPFile[] list = ftpClient.listFiles();
return list;

}

/**
* 循环将设置工作目录
*/
public boolean changeDir(String ftpPath) {
if (!ftpClient.isConnected()) {
return false;
}
try {

// 将路径中的斜杠统一
char[] chars = ftpPath.toCharArray();
StringBuffer sbStr = new StringBuffer(256);
for (int i = 0; i < chars.length; i++) {

if ('\\' == chars[i]) {
sbStr.append('/');
} else {
sbStr.append(chars[i]);
}
}
ftpPath = sbStr.toString();
// System.out.println("ftpPath"+ftpPath);

if (ftpPath.indexOf('/') == -1) {
// 只有一层目录
// System.out.println("change"+ftpPath);
ftpClient.changeWorkingDirectory(new String(ftpPath.getBytes(),
"iso-8859-1"));
} else {
// 多层目录循环创建
String[] paths = ftpPath.split("/");
// String pathTemp = "";
for (int i = 0; i < paths.length; i++) {
// System.out.println("change "+paths[i]);
ftpClient.changeWorkingDirectory(new String(paths[i]
.getBytes(), "iso-8859-1"));
}
}

return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

/**
* 循环创建目录,并且创建完目录后,设置工作目录为当前创建的目录下
*/
public boolean mkDir(String ftpPath) {
if (!ftpClient.isConnected()) {
return false;
}
try {

// 将路径中的斜杠统一
char[] chars = ftpPath.toCharArray();
StringBuffer sbStr = new StringBuffer(256);
for (int i = 0; i < chars.length; i++) {

if ('\\' == chars[i]) {
sbStr.append('/');
} else {
sbStr.append(chars[i]);
}
}
ftpPath = sbStr.toString();
System.out.println("ftpPath" + ftpPath);

if (ftpPath.indexOf('/') == -1) {
// 只有一层目录

ftpClient.makeDirectory(new String(ftpPath.getBytes(),
"iso-8859-1"));
ftpClient.changeWorkingDirectory(new String(ftpPath.getBytes(),
"iso-8859-1"));
} else {
// 多层目录循环创建
String[] paths = ftpPath.split("/");
// String pathTemp = "";
for (int i = 0; i < paths.length; i++) {

ftpClient.makeDirectory(new String(paths[i].getBytes(),
"iso-8859-1"));
ftpClient.changeWorkingDirectory(new String(paths[i]
.getBytes(), "iso-8859-1"));
}
}

return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

/**
* 上传文件到FTP服务器
*
* @param localPathAndFileName
* 本地文件目录和文件名
* @param ftpFileName
* 上传后的文件名
* @param ftpDirectory
* FTP目录如:/path1/pathb2/,如果目录不存在回自动创建目录
* @throws Exception
*/
public boolean put(String localDirectoryAndFileName, String ftpFileName,
String ftpDirectory) {
if (!ftpClient.isConnected()) {
return false;
}
boolean flag = false;
if (ftpClient != null) {
File srcFile = new File(localDirectoryAndFileName);
FileInputStream fis = null;
try {
fis = new FileInputStream(srcFile);

// 创建目录

this.mkDir(ftpDirectory);

ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");

// 设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
// 上传
flag = ftpClient.storeFile(new String(ftpFileName.getBytes(),
"iso-8859-1"), fis);
} catch (Exception e) {
this.close();
e.printStackTrace();
return false;
} finally {
IOUtils.closeQuietly(fis);
}
}

System.out.println("success put file " + localDirectoryAndFileName
+ " to " + ftpDirectory + ftpFileName);
return flag;
}

/**
* 从FTP服务器上下载文件并返回下载文件长度
*
* @param ftpDirectoryAndFileName
* @param localDirectoryAndFileName
* @return
* @throws Exception
*/
public long get(String ftpDirectoryAndFileName,
String localDirectoryAndFileName) {

long result = 0;
if (!ftpClient.isConnected()) {
return 0;
}
ftpClient.enterLocalPassiveMode(); // Use passive mode as default
// because most of us are behind
// firewalls these days.

try {
// 将路径中的斜杠统一
char[] chars = ftpDirectoryAndFileName.toCharArray();
StringBuffer sbStr = new StringBuffer(256);
for (int i = 0; i < chars.length; i++) {

if ('\\' == chars[i]) {
sbStr.append('/');
} else {
sbStr.append(chars[i]);
}
}
ftpDirectoryAndFileName = sbStr.toString();
String filePath = ftpDirectoryAndFileName.substring(0,
ftpDirectoryAndFileName.lastIndexOf("/"));
String fileName = ftpDirectoryAndFileName
.substring(ftpDirectoryAndFileName.lastIndexOf("/") + 1);
// System.out.println("filePath | "+filePath);
// System.out.println("fileName | "+fileName);
this.changeDir(filePath);
ftpClient.retrieveFile( new String(fileName.getBytes(), "iso-8859-1"), new FileOutputStream(localDirectoryAndFileName)); // download
// file
System.out.print(ftpClient.getReplyString()); // check result

} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Success get file" + ftpDirectoryAndFileName
+ " from " + localDirectoryAndFileName);
return result;
}

/**
* 返回FTP目录下的文件列表
*
* @param ftpDirectory
* @return
*/
public List getFileNameList(String ftpDirectory) {
List list = new ArrayList();
// if (!open())
// return list;
// try {
// DataInputStream dis = new DataInputStream(ftpClient
// .nameList(ftpDirectory));
// String filename = "";
// while ((filename = dis.readLine()) != null) {
// list.add(filename);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
return list;
}

/**
* 删除FTP上的文件
*
* @param ftpDirAndFileName
*/
public boolean deleteFile(String ftpDirAndFileName) {
if (!ftpClient.isConnected()) {
return false;
}
//Todo
return true;
}

/**
* 删除FTP目录
*
* @param ftpDirectory
*/
public boolean deleteDirectory(String ftpDirectory) {
if (!ftpClient.isConnected()) {
return false;
}
//ToDo
return true;
}

/**
* 关闭链接
*/
public void close() {
try {
if (ftpClient != null && ftpClient.isConnected())
ftpClient.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Close Server Success :"+this.server+";port:"+this.port);
}

public FTPClient getFtpClient() {
return ftpClient;
}

public void setFtpClient(FTPClient ftpClient) {

this.ftpClient = ftpClient;
}
}

//设置以什么文件的格式输出

try
{
response.setContentType("application/octet-stream;charset=GB2312");
String downloadname=downName;
response.setHeader("Content-Disposition","attachment; filename="+downloadname);

if (filename!=null)
{
File file1=new File(folerDown);
FileInputStream is=new FileInputStream(file1);
byte []bbb=new byte[(int)file1.length()];

System.out.println("------bbb.length:"+bbb.length);
is.read(bbb);
is.close();
OutputStream out = response.getOutputStream();
out.write(bbb);
out.close();
response.setStatus(response.SC_OK);
file1.delete();
}
else
{
System.out.println("----createExcelFile error!");
}
}
catch (Exception e)
{
System.out.println("----------ex in servlet:"+e);
e.printStackTrace();
}

分享到:
评论

相关推荐

    JAVA获取FTP文件列表

    JAVA获取FTP文件列表,功能齐全。包括:链接到服务器,上传文件到FTP服务器,从FTP服务器上下载文件并返回下载文件长度,返回FTP目录下的文件列表,删除FTP上的文件及目录,关闭链接。

    java编写的ftp文件实时监控下载上传

    用java语言编写的ftp小工具,可以按指定时间监控ftp服务器,把服务器指定目录内新产生的文件或者文件夹下载到本地指定文件夹,下载后删除数据。 也可以监控本地文件夹,把文件夹内新产生的文件或者文件夹整体上传到...

    JAVA操作FTP文件服务器上传与下载文件

    JAVA操作FTP文件服务器上传与下载文件,包含远程动态创建文件夹、查看文件是否存在、删除文件、上传文件和下载文件等方法

    java通过sftp模式实现FTP的文件上传下载删除功能

    java通过sftp模式实现FTP的文件上传下载删除功能

    Java上传文件到FTP服务器,支持断点续传.rar

    java实现ftp断点续传,上传文件到FTP服务器,支持断点续传,同时支持LINUX主机,代码里面包括了比较多的java网络操作类,比如连接FTP的常规类、递归创建远程服务器目录 上传文件到服务器,新上传和断点续传操作,远程...

    java ftp上传 下载,获取文件集合

    java 连接linux系统上的ftp服务器,通过java代码上传,下载文件 通过链接ftp,获取文件列表,上传。下载、删除文件功能实现

    JAVA技术实现上传下载文件到FTP服务器(完整)

    主要介绍了JAVA技术实现上传下载文件到FTP服务器(完整),本文使用 Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作,需要的朋友可以参考下

    java上传、下载、删除ftp文件-源码

    java上传、下载、删除ftp文件-java源码 有需要的希望能帮助到

    java实现ftp的所有操作

    这是用java实现ftp操作的一些代码,里面有上传,下载,删除服务器上制定文件以及断点续传的操作!!希望能帮助需要的人!!

    Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法

    主要介绍了Java实现ftp上传下载、删除文件及在ftp服务器上传文件夹的方法,需要的朋友可以参考下

    java ftp上传进行文件

    java ftp上传进行文件的读取和上传 上传单个文件的文件流 创建远程服务器目录 删除指定文件 上传单个文件 获取指定ftp目录下文件名

    java API操作FTP上传下载

    用javaAPI操作ftp上传下载文件,用于把本地主机上的文件上传到远程ftp服务器、下载远程ftp服务器上的文件到本地主机、删除远程文件、重命名远程文件、 新建远程目录以及删除远程目录。

    Java通过FTP服务器上传下载文件的方法

    本文介绍了如何使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作,需要的朋友可以参考下

    java操作ftp代码.rar_Java操作FTP_ftg客户端_ftp java_java ftp

    Java操作FTP服务器,连接FTP,上传文件,删除文件,下载文件

    ssh2多文件的上传与下载

    文件不建议保存在tomcat服务器下,因为重启服务器上传的文件就被覆盖,建议报存在绝对路径下或上传到ftp 5.文件的删除根据数据库id进行删除(数据库表存放在数据库文件夹中,将data.sql和object.sql导入oracle...

    springmvcftp文件上传下载增删改查ftp搭建linuxwindows

    主要功能是使用前台plupload插件实现批量文件上传功能,后台把文件流传到FTP上面以及对应文件的下载删除修改功能,内容包括ftp在Linux平台和window下的搭建等等。(请结合我之前发布的plupload插件使用,如不需要可...

    FTP客户端上传下载

    FTP上传与下载使用说明书 程序说明 本程序没有使用数据库...在界面下方有三个选项卡,分别记录当前下载文件、已上传文件及已下载文件。在队列选项卡中,可对当前正在下载的任务进行暂停、删除、清空、上下移动等操作。

    ftp4j-1.6-支持代理配置

    可以将ftp4j嵌到你的Java应用中,来传输文件(包括上传和下载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括:通过 TCP/IP直接连接,通过...

    基于Java网盘管理系统-ftp服务器

    文件的管理,上传、下载、重命名、删除、查看统计数据、分类管理等。 文件夹的管理,创建、删除、重命名。 文件的分享,支持通过链接和二维码的分享方式。 区分普通用户和管理员的角色,管理员可以修改普通...

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

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

Global site tag (gtag.js) - Google Analytics