通过java操作ftp

在做项目中,我们一般都会有上传附件的需求,所以学会操作文件是java基础。关于文件存放的选择暂时知道的也就几种:
1、保存在磁盘,这种方式算是比较好的,但是部署在各个地方的应用需要共同访问时就很麻烦。
2、保存在数据库,这个有些人会用,但是相对用的人比较少,因为它即使有着让所有的应用都能访问的方便。但是会使数据库的体积快速增长,倒致后期操作数据比较麻烦,比如说迁移等等。
3、最后我还知道的一种方式是,上传到ftp。这种最终也是通过磁盘保存,但是这样方便多个应用访问。个人觉得是一种比较好的保存方式。
以下为 java代码
package com.talent.main.freewf.util;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
import com.buyli.base.exception.GeneralException; //这个是自定义异常,java代码中需要作一定的修改
import com.buyli.base.util.ArchiveUtil; //这里作为静态参数类 java代码中需要作一定修改
import com.buyli.base.util.LoggerUtil; //这个是日志操作类 java代码中需要作一定修改
/**
* @title:ApacheFtpClient
* @Copyright @ 2012 All right reserved
* @author www.360buyli.com
* @Date 2012-3-13 下午01:57:23
* @version 1.0
* @description ftp文件处理
*
*/
public class ApacheFtpClient {
static Logger logger=Logger.getLogger(ApacheFtpClient.class);
private FtpClient ftpClient;
public ApacheFtpClient() {
}
private void connect() {
try {
ftpClient = new FtpClient();
ftpClient.openServer(ArchiveUtil.SERVER); //这里是ftp服务器的ip 如:192.168.8.99
ftpClient.login(ArchiveUtil.USER, ArchiveUtil.PASSWORD); //这里分别为用户名和密码
} catch (IOException e) {
e.printStackTrace();
}
}
/**
*
* @param filename
* 文件名
* @param filelocal
* 本地路径
* @param ftppath
* ftp路径
* @throws Exception
*/
public void up(String filename, String filelocal, String ftppath)
throws Exception {
this.connect();
try {
if (ftppath.length() != 0) {
ftpClient.cd(ftppath);
} else {
ftpClient.cd("/");
}
ftpClient.binary();
TelnetOutputStream os = ftpClient.put(filename);
File file_in = new File(filelocal);
FileInputStream is = new FileInputStream(file_in);
byte[] bytes = new byte[ArchiveUtil.BUFFER];
int c;
while ((c = is.read(bytes)) != -1) {
os.write(bytes, 0, c);
}
is.close();
os.close();
this.close();
} catch (IOException ex) {
this.close();
ex.printStackTrace();
}
}
/**
* 读取目录下存在的文件
*
* @param args
* @throws IOException
* @throws GeneralException
* @throws Exception
*/
public List<String> readFile(String ftppath) throws IOException, GeneralException {
this.connect();
List<String> readFileList = new ArrayList<String>();
try {
if (ftppath.length() != 0) {
ftpClient.cd(ftppath);
} else {
ftpClient.cd("/");
}
ftpClient.binary();
BufferedReader ftpFileName = new BufferedReader(
new InputStreamReader(ftpClient.nameList(ftppath)));
String strName = "";
while ((strName = ftpFileName.readLine()) != null) {
readFileList.add(strName);
}
} catch (Exception e) {
LoggerUtil.logError(e,logger,"连接FTP失败");
e.printStackTrace();
} finally {
this.close();
}
return readFileList;
}
/**
* 下载单个文件
*
* @param args
* @throws IOException
* @throws IOException
* @throws GeneralException
* @throws SocketException
* @throws Exception
*/
public void download(String filename, String filepath) throws IOException,
GeneralException {
this.connect();
File basefile = new File(ArchiveUtil.TEMPSAVEXML);
if(basefile.exists()){
basefile.mkdir();
}
String localpath = ArchiveUtil.TEMPSAVEXML + File.separator + filename; // 文件的本地存放路径
ftpClient.cd(filepath);
File file = new File(localpath);
OutputStream out = new FileOutputStream(file);
TelnetInputStream fget = ftpClient.get(filename);
DataInputStream puts = new DataInputStream(fget);
byte[] bt = new byte[ArchiveUtil.BUFFER];
int i;
while ((i = puts.read(bt)) != -1) {
out.write(bt, 0, i);
}
puts.close();
fget.close();
out.close();
this.close();
}
/**
* 删除ftp文件,当文件读取下载完成,读取内容,接收成功后删除,如果接收失败,则再次上传后删除
*
* @param args
* @throws Exception
*/
public void delete_file(String url, String ftppath) throws Exception {
this.connect();
if (ftppath.length() != 0) {
ftpClient.cd(ftppath);
} else {
ftpClient.cd("/");
}
ftpClient.binary();
ftpClient.sendServer("DELE " + url + "\r\n");
@SuppressWarnings("unused")
int status = ftpClient.readServerResponse();
this.close();
}
public void close() {
if (ftpClient != null) {
try {
ftpClient.closeServer();
} catch (IOException e) {
LoggerUtil.logError(e,logger,"ftp关闭时出错");
e.printStackTrace();
}
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值