java实现ftp上传下载
依赖的jar报为commons-net
相关pom为:
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
下面是实现代码,及测试main方法
package util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.SocketException;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
//ftp下载及上传
public class FtpUtil {
public static String url="121.232.195.83";
public static int port=21;
public static String username="haha";
public static String password="haha#haha";
@SuppressWarnings("null")
public static FTPClient connectFtpClient() {
FTPClient ftpClient=new FTPClient();
try {
ftpClient.connect(url, port);
ftpClient.login(username, password);
if(!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){
System.out.println("连接ftp失败!");
ftpClient.disconnect();
}else{
System.out.println("连接成功!");
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ftpClient;
}
/**
* 文件下载
* @param path
* @param downloadFileName
* @param localFileName
*/
public static void downloadFile(String path,String downloadFileName,String localFileName) {
FTPClient ftpClient=null;
InputStream io;
try {
ftpClient=connectFtpClient();
ftpClient.changeWorkingDirectory(path);
FileOutputStream out=new FileOutputStream(localFileName);
io = ftpClient.retrieveFileStream(downloadFileName);
int length=1024;
byte[] bytes=new byte[1024];
while((length=io.read(bytes))>-1){
out.write(bytes, 0, length);
}
//也可以直接使用ftpClient.retrieveFile("filename", outStream) 输出到out流
out.close();
ftpClient.logout();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 文件上传
* @param path
* @param uploadFileName
* @param localFileName
*/
public static void uploadFile(String path,String uploadFileName,String localFileName) {
FTPClient ftpClient=null;
try {
ftpClient=connectFtpClient();
ftpClient.setControlEncoding("UTF-8");
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//ftpClient.enterLocalPassiveMode();//被动模式
ftpClient.enterLocalActiveMode();//主动模式
ftpClient.changeWorkingDirectory(path);
FileInputStream fileInputStream=new FileInputStream(new File(localFileName));
ftpClient.storeFile(uploadFileName, fileInputStream);
fileInputStream.close();
ftpClient.logout();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
String path="/wallet/114816004000028";
String downFileName="114816004000028_20170829.txt";
String localUrl="d:/tmp/1234567.txt";
String uploadFileName="haha.txt";
downloadFile(path, downFileName, localUrl);
uploadFile(path,downFileName,localUrl);
}
}