您的位置:首页 > 运维架构 > Apache

Java FTP(Apache)文件上传、下载

2013-03-07 15:02 483 查看
ftpjar包下载:http://download.csdn.net/detail/lgq_0714/4216449

[java]
view plaincopyprint?

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
/**
* @author Administrator
* @version 1.0
* @date 2012-3-12
* @class_displayName FTPUtils
*/

public class FTPUtils {
/**
* Description: 向FTP服务器上传文件 通过sun的FtpClient实现上传(为了解决中文文件乱码问题)
* @param url FTP服务器IP地址
* @param port FTP服务器端口
* @param username FTP登录账号
* @param password FTP登录密码
* @param path FTP服务器保存目录
* @param originalFileName 原始文件名
* @param ftpFileName 上传到FTP服务器上的文件名
* @return 成功返回true,否则返回false
*/
public static boolean uploadFile(String server, int port, String user,
String password, String path, String originalFileName,
String ftpFileName) {
boolean success = false;
FtpClient ftpClient;

try {
ftpClient = new FtpClient();
ftpClient.openServer(server,port);
ftpClient.login(user, password);
System.out.println("Login .......");

// path是ftp服务下主目录的子目录
if (path.length() != 0)
ftpClient.cd(path);

// 用2进制上传,防止上传中文文件乱码
ftpClient.binary();

TelnetOutputStream os = null;
FileInputStream is = null;

os = ftpClient.put(ftpFileName);
File file_in = new File(originalFileName);
if (file_in.length() == 0) {
throw new Exception("上传文件为空!");
}
is = new FileInputStream(file_in);
byte[] bytes = new byte[1024];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
is.close();
os.close();
success = true;
} catch (Exception e) {
e.printStackTrace();
}

return success;
}

/**
* Description: 从FTP服务器下载文件 通过Apache的FTPClient实现文件的下载
*
* @param ip FTP服务器的ip地址
* @param port FTP服务器端口,默认为:21
* @param username FTP登录账号
* @param password FTP登录密码
* @param remotePath FTP服务器上的相对路径
* @param fileName 要下载的文件名
* @param localPath 下载后保存到本地的路径
* @return
*/
public static boolean downloadFile(String ip, int port, String username,
String password, String remotePath, String fileName,
String localPath) {
boolean success = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(ip, port);
// 下面三行代码必须要,而且不能改变编码格式,否则不能正确下载中文文件

ftp.setControlEncoding("GBK");
FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_NT);
conf.setServerLanguageCode("zh");

// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器

ftp.login(username, password);// 登录

reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}

ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录

FTPFile[] fs = ftp.listFiles();

for (int i = 0; i < fs.length; i++) {
FTPFile ff = fs[i];
if (!ff.getName().equals(".") && !ff.getName().equals("..")) {

File localFile = new File(localPath + File.separator
+ ff.getName());

if(!localFile.exists())//如果文件已存在则不重复下载

{
OutputStream is = new FileOutputStream(localFile);

// 注意此处retrieveFile的第一个参数由GBK转为ISO-8859-1编码。否则下载后的文件内容为空。

// 原因可能是由于aix系统默认的编码为ISO-8859-1

ftp.retrieveFile(new String(ff.getName().getBytes("GBK"),
"ISO-8859-1"), is);
is.close();
}
}
}

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("------------------end:"+dateFormat.format(new Date())+"-----------------------------------");

ftp.logout();
success = true;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (Exception ioe) {
ioe.printStackTrace();
}
}
}
return success;
}

public static void main(String[] args) {
try {
downloadFile("192.168.103.215", 21, "servu", "111111",
"D:/ftpserv", "测试.xls", "C:/primeton2012/jakarta-tomcat-5.0.28/upload/FEEDBACK_INFO");

// server:FTP服务器的IP地址

String server = "192.168.103.215";
// user:登录FTP服务器的用户名

String user = "servu";
// password:登录FTP服务器的用户名的口令

String password = "111111";
// path:FTP服务器上的路径
String path = "D:/ftpserv";
// 要上传本地文件路径
String originalFileName = "F://Web//Web//src//测试.xls";
// 上传服务器上文件名
String ftpFileName = "测试2012-3-12-植树节-.xls";

uploadFile(server, 21, user, password, path, originalFileName, ftpFileName);
} catch (Exception e) {
e.printStackTrace();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: