JAVA ftp服务器上传文件
程序员文章站
2022-06-20 10:50:15
...
最近在做一个同步数据的项目时遇到了附件要保存在单独的文件服务器的状况。而文件服务器采用的是ftp服务器,我了解到除了ftp服务器外还可以创建共享目录来保存文件。
那使用ftp保存文件的具体方法就是:
package control.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
public class copyFile {
private FTPClient ftp;
/**
*
* @param path 上传到ftp服务器哪个路径下
* @param addr 地址
* @param port 端口号
* @param username 用户名
* @param password 密码
* @return
* @throws Exception
*/
private boolean connect(String path,String addr,int port,String username,String password) throws Exception {
boolean result = false;
ftp = new FTPClient();
int reply;
ftp.connect(addr,port);
ftp.login(username,password);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
ftp.changeWorkingDirectory(path);
Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String newFilePath = sdf.format(dt);
if (!ftp.changeWorkingDirectory(newFilePath)) {
this.createDir(newFilePath);
}
ftp.changeWorkingDirectory("/"+newFilePath);
result = true;
return result;
}
/**
*
* @param file 上传的文件或文件夹
* @throws Exception
*/
private void upload(File file) throws Exception{
if(file.isDirectory()){
ftp.makeDirectory(file.getName());
ftp.changeWorkingDirectory(file.getName());
String[] files = file.list();
for (int i = 0; i < files.length; i++) {
File file1 = new File(file.getPath()+"\\"+files[i] );
if(file1.isDirectory()){
upload(file1);
ftp.changeToParentDirectory();
}else{
File file2 = new File(file.getPath()+"\\"+files[i]);
FileInputStream input = new FileInputStream(file2);
ftp.storeFile(file2.getName(), input);
input.close();
}
}
}else{
File file2 = new File(file.getPath());
FileInputStream input = new FileInputStream(file2);
ftp.storeFile(file2.getName(), input);
input.close();
}
}
//利用ftpclient的makeDirectory方法创建文件夹
public void createDir(String dirname){
try{
ftp.makeDirectory(dirname);
System.out.println("在目标服务器上成功建立了文件夹: " + dirname);
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
//断开连接
public void disconnect(){
try {
ftp.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
//调用方法
public static void copyFileByFtp(String filePath) throws Exception{
DBHelper db = new DBHelper();
InputStream is = db.getClass().getResourceAsStream("/config.properties");
Properties props=new Properties();
props.load(is);
String path = (String) props.get("path");
String addr = (String) props.get("addr");
int port = Integer.parseInt((String) props.get("port"));
String username = (String) props.get("ftpUsername");
String password = (String) props.get("ftpPassword");
copyFile ftpLink = new copyFile();
ftpLink.connect(path.trim(), addr.trim(),port, username.trim(), password.trim());
File file = new File(filePath);
if (file.exists()) {
ftpLink.upload(file);
}else{
System.out.println("!!!!!!!!!文件不存在"+filePath);
}
ftpLink.disconnect();//断开连接
}
}
使用的jar包是 : commons-net-3.0.1.jar,可以在csdn下载的
想要测试的话可以在本地建一个ftp服务器,教程:http://jingyan.baidu.com/article/48206aeadc3c4b216bd6b369.html?qq-pf-to=pcqq.c2c