先给各位大佬问声好,小编今天写了一个FTP上传/下载方法希望能够帮助要大家。
话不多说上代码!!!!!!!!!!
第一步:先写一个FTP连接工具类
public class FTPconnection {
private static final String FTP_SERVER = "192.168.182.128"; // 服务地址
private static final int FTP_PORT = 21; //端口号
private static final String FTP_USER = "ftp123"; // 用户名
private static final String FTP_PASSWORD = "ftp123#";//用户密码
private static final int TIMEOUT = 5000; // 设置超时时间
private static final String ENCODING = "UTF-8";//设置数据编码格式
private static final String ftp="文件名称";//ftp获取下载文件名称
public static FTPClient getFTPClient() throws Exception {
FTPClient client = new FTPClient(); // 实例化FTPClient类实例
client.connect(FTP_SERVER, FTP_PORT); // 设置连接主机信息
client.login(FTP_USER, FTP_PASSWORD); // 实现服务登录
client.setConnectTimeout(TIMEOUT); // 超时时间
client.setControlEncoding(ENCODING); // 编码
System.out.println("【FTP连接】状态码" + client.getReplyCode()); // 如果可以连接返回230
return client;
}
}
上传文件方法方法:
public static void setFTP(String s) throws Exception {
SimpleDateFormat sdf=new SimpleDateFormat("yyyMMdd");
Date date=new Date();
String format = sdf.format(date); //会时间命名生成一个文件夹
String ftpPath = "/home/ftp123/"+format+"/"; // 此目录为Linux已经存在的路径,但是子路径不存在
FTPClient client = FTPconnection.getFTPClient(); // 获取FTP连接
client.enterLocalPassiveMode(); // 采用被动模式
client.setFileType(FTPClient.BINARY_FILE_TYPE); // 采用二进制传输
client.setBufferSize(2048); // 设置上传的缓存大小
if (!client.changeWorkingDirectory(ftpPath)) { // 切换目录
client.makeDirectory(ftpPath); // 目录的创建
}
File file = new File("e:" + File.separator + s); // 定义上传文件
// 所有的文件是以二进制数据流的形式进行传输的,所以一定要通过InputStream获取一个输入流
InputStream input = new FileInputStream(file); // 文件输入流
String tempName = ftpPath + file.getName(); // FTP文件保存名称
String ftpFileName = new String(tempName.getBytes("UTF-8"), "ISO-8859-1");
// 在进行文件保存的需要明确配置存储文件的名称,同时利用输入流进行数据的传输
boolean b = client.storeFile(ftpFileName, input);
if (b) {
System.out.println("FTP文件上传成功!");
} else {
System.out.println("FTP文件上传失败!");
}
input.close(); // 传输完成后关闭输入流
client.logout(); // 注销
}
下载文件方法:
public static void getFTP(String sjian) throws Exception {
String ftppath="/home/ftp123/"+sjian;//ftp已经存在的目录
String ftp="文件名称";//ftp获取下载文件
FTPClient client =FTPconnection.getFTPClient();
client.enterLocalPassiveMode();//采用被动模式
client.setFileType(FTPClient.BINARY_FILE_TYPE);//二进制
client.setBufferSize(2048);//设置上次缓存大小
if (client.changeWorkingDirectory(ftppath)){
FTPFile[] ftpFiles = client.listFiles();
for (FTPFile file : ftpFiles) {
if (file.getName().trim().equalsIgnoreCase(ftp)) { // 找到了匹配的文件名称
// 为了可以区分出下载文件,本次进行一个强制性的命名
File downFile = new File("f:" + File.separator + ftp);
// 要通过FTP下载文件,是需要利用输出流进行输出写入的
OutputStream output = new FileOutputStream(downFile); // 获取文件流
boolean flag = client.retrieveFile(new String(file.getName().getBytes("UTF-8"), "ISO-8859-1"), output);
output.flush();
output.close();
System.out.println(flag ? "文件下载成功!" : "文件下载失败!");
}
}
}
client.logout();
}
有不同的意见欢迎留言讨论!!!!!!!