java中使用FTP上传下载文件

1 篇文章 0 订阅

使用jar包:commons-net-1.4.0.jar,jakarta-oro-2.0.8.jar

代码如下(自己电脑自测(自测的话电脑需要设置FTP共享目录,百度教程即可),使用时修改FTP链接信息即可):

package com.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

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

public class FTPTest {
	
	public static void main(String[] args) throws UnsupportedEncodingException {
		//uploadTest();//上传测试
		downloadTest();//下载测试
	}
	
	public static void downloadTest(){
		String hostName="127.0.0.1";
		int port=21;
		String userName="Along";
		String password="123456";
		String fileName="ftpTest.txt";   //服务器上存放的文件名
		String pathName="/public/txt/";   //服务器上存放文件的目录
		//String name=new String(pathName.getBytes("GBK"),"iso-8859-1");// 转换后的目录名或文件名。
		String originFileName="E:/ftpFile/download"; //下载的文件存放路径
		String newFileName="ftp123.txt"; //下载的文件本地保存时更改成该名
		//boolean flag=downloadFile(hostName, port, userName, password, pathName, fileName, originFileName);
		boolean flag=downloadFile(hostName, port, userName, password, pathName, fileName, newFileName, originFileName);
		
		if(flag){
			System.out.println("OK!");
		}else{
			System.out.println("No!");
		}
		System.out.println("000000");
	}
	
	public static void uploadTest(){
		String hostName="127.0.0.1";
		int port=21;
		String userName="Along";
		String password="123456";
		String fileName="ftpTest.txt";   //服务器上存放的文件名
		String pathName="/public/txt";   //服务器上存放的目录,没有的话新建
		//String name=new String(pathName.getBytes("GBK"),"iso-8859-1");// 转换后的目录名或文件名。
		String originFileName="E:\\ftpFile\\123.txt"; //被上传文件路径,本地绝对路径
		boolean flag=uploadFileFromProduction(hostName, port, userName, password, pathName, fileName, originFileName);
		//boolean flag=uploadFileFromProduction(hostName, port, userName, password, pathName, originFileName);
		
		if(flag){
			System.out.println("OK!");
		}else{
			System.out.println("No!");
		}
		System.out.println("000000");
	}
	
	/**
	 * * 下载文件 * 可更改文件名
	 * @param hostname  FTP服务器地址 *
	 * @param port  FTP服务器端口号 *
	 * @param username  FTP登录帐号 *
	 * @param password  FTP登录密码 *
	 * @param pathname  FTP服务器文件目录 *
	 * @param filename 文件名称 *
	 * @param localpath 下载后的文件路径 *
	 * @return
	 */
	public static boolean downloadFile(String hostname, int port,
			String username, String password, String pathname, String filename,
			String newFileName, String localpath) {
		boolean flag = false;
		FTPClient ftpClient = new FTPClient();
		try {
			// 连接FTP服务器
			ftpClient.connect(hostname, port);
			// 登录FTP服务器
			ftpClient.login(username, password);
			// 验证FTP服务器是否登录成功
			int replyCode = ftpClient.getReplyCode();
			if (!FTPReply.isPositiveCompletion(replyCode)) {
				return flag;
			}
			// 切换FTP目录
			ftpClient.changeWorkingDirectory(pathname);
			FTPFile[] ftpFiles = ftpClient.listFiles();
			for (FTPFile file : ftpFiles) {
				if (filename.equalsIgnoreCase(file.getName())) {
					File localFile = new File(localpath + "/" + newFileName);
					File file1=new File(localpath);
					if(!file1.exists()){ //本地存放目录如果不存在则新建
						file1.mkdirs();
					}
					OutputStream os = new FileOutputStream(localFile);
					ftpClient.retrieveFile(file.getName(), os);
					os.close();
				}
			}
			ftpClient.logout();
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (ftpClient.isConnected()) {
				try {
					ftpClient.logout();
				} catch (IOException e) {

				}

			}
		}
		return flag;
	}

	/**
	 * * 下载文件 * 不可更改文件名
	 * @param hostname  FTP服务器地址 *
	 * @param port  FTP服务器端口号 *
	 * @param username  FTP登录帐号 *
	 * @param password  FTP登录密码 *
	 * @param pathname  FTP服务器文件目录 *
	 * @param filename 文件名称 *
	 * @param localpath 下载后的文件路径 *
	 * @return
	 */
	public static boolean downloadFile(String hostname, int port,
			String username, String password, String pathname, String filename,
			String localpath) {
		boolean flag = false;
		FTPClient ftpClient = new FTPClient();
		try {
			// 连接FTP服务器
			ftpClient.connect(hostname, port);
			// 登录FTP服务器
			ftpClient.login(username, password);
			// 验证FTP服务器是否登录成功
			int replyCode = ftpClient.getReplyCode();
			if (!FTPReply.isPositiveCompletion(replyCode)) {
				return flag;
			}
			// 切换FTP目录
			ftpClient.changeWorkingDirectory(pathname);
			FTPFile[] ftpFiles = ftpClient.listFiles();
			for (FTPFile file : ftpFiles) {
				if (filename.equalsIgnoreCase(file.getName())) {
					File localFile = new File(localpath + "/" + file.getName());
					File file1=new File(localpath);
					if(!file1.exists()){ //本地存放目录如果不存在则新建
						file1.mkdirs();
					}
					OutputStream os = new FileOutputStream(localFile);
					ftpClient.retrieveFile(file.getName(), os);
					os.close();
				}
			}
			ftpClient.logout();
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (ftpClient.isConnected()) {
				try {
					ftpClient.logout();
				} catch (IOException e) {

				}

			}
		}
		return flag;
	}

	/*
	 * 上传文件
	 * @param hostname ftp服务器地址
	 * @param port ftp服务器端口号
	 * @param username ftp登录账号
	 * @param password ftp登录密码
	 * @param pathname ftp服务保存地址
	 * @param fileName 上传到ftp的文件名
	 * @param inputStream 输入文件流
	 * @return
	 */
	public static boolean uploadFile(String hostname, int port,
			String username, String password, String pathname, String fileName,
			InputStream inputStream) {
		boolean flag = false;
		FTPClient ftpClient = new FTPClient();
		ftpClient.setControlEncoding("utf-8");
		try {
			ftpClient.connect(hostname, port); // 连接ftp服务器
			ftpClient.login(username, password); // 登录ftp服务器
			int replyCode = ftpClient.getReplyCode(); // 是否成功登录服务器
			if (!FTPReply.isPositiveCompletion(replyCode)) {
				return flag;
			}
			ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
			
			// make directory
            if (pathname != null && !"".equals(pathname.trim())) {
                String[] pathes = pathname.split("/");
                for (String onepath : pathes) {
                    if (onepath == null || "".equals(onepath.trim())) {
                        continue;
                    }
                    //FTP默认iso-8859-1编码,防止中文乱码
                    onepath=new String(onepath.getBytes("GBK"),"iso-8859-1");                    
                    if (!ftpClient.changeWorkingDirectory(onepath)) {
                        ftpClient.makeDirectory(onepath);
                        ftpClient.changeWorkingDirectory(onepath);
                    }
                }
            }
			
            //FTP不能创建多级目录,所以要分级创建,以下代码不能用
			//ftpClient.makeDirectory(pathname);
			//ftpClient.changeWorkingDirectory(pathname);
            
            //FTP默认iso-8859-1编码,防止中文乱码
			ftpClient.storeFile(new String(fileName.getBytes("GBK"),"iso-8859-1"), inputStream); // 转换后的目录名或文件名。
			inputStream.close();
			ftpClient.logout();
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (ftpClient.isConnected()) {
				try {
					ftpClient.disconnect();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}

		}
		return true;
	}

	/**
	 * * 上传文件(可对文件进行重命名) *
	 * @param hostname  FTP服务器地址 *
	 * @param port  FTP服务器端口号 *
	 * @param username  FTP登录帐号 *
	 * @param password  FTP登录密码 *
	 * @param pathname  FTP服务器保存目录 *
	 * @param filename  上传到FTP服务器后的文件名称 *
	 * @param originfilename  待上传文件的名称(绝对地址) *
	 * @return
	 */
	public static boolean uploadFileFromProduction(String hostname, int port,
			String username, String password, String pathname, String filename,
			String originfilename) {
		boolean flag = false;
		try {
			InputStream inputStream = new FileInputStream(new File(
					originfilename));
			flag = uploadFile(hostname, port, username, password, pathname,
					filename, inputStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flag;
	}

	/**
	 * 上传文件(不可以进行文件的重命名操作) *
	 * @param hostname  FTP服务器地址 *
	 * @param port  FTP服务器端口号 *
	 * @param username  FTP登录帐号 *
	 * @param password  FTP登录密码 *
	 * @param pathname  FTP服务器保存目录 *
	 * @param originfilename  待上传文件的名称(绝对地址) *
	 * @return
	 */
	public static boolean uploadFileFromProduction(String hostname, int port,
			String username, String password, String pathname,
			String originfilename) {
		boolean flag = false;
		try {
			String fileName = new File(originfilename).getName();//改名操作
			InputStream inputStream = new FileInputStream(new File(
					originfilename));
			flag = uploadFile(hostname, port, username, password, pathname,
					fileName, inputStream);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return flag;
	}

	/**
	 * * 删除文件 *
	 * @param hostname  FTP服务器地址 *
	 * @param port  FTP服务器端口号 *
	 * @param username  FTP登录帐号 *
	 * @param password  FTP登录密码 *
	 * @param pathname  FTP服务器保存目录 *
	 * @param filename  要删除的文件名称 *
	 * @return
	 */
	public static boolean deleteFile(String hostname, int port,
			String username, String password, String pathname, String filename) {
		boolean flag = false;
		FTPClient ftpClient = new FTPClient();
		try {
			// 连接FTP服务器
			ftpClient.connect(hostname, port);
			// 登录FTP服务器
			ftpClient.login(username, password);
			// 验证FTP服务器是否登录成功
			int replyCode = ftpClient.getReplyCode();
			if (!FTPReply.isPositiveCompletion(replyCode)) {
				return flag;
			}
			// 切换FTP目录
			ftpClient.changeWorkingDirectory(pathname);
			ftpClient.dele(filename);
			ftpClient.logout();
			flag = true;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (ftpClient.isConnected()) {
				try {
					ftpClient.logout();
				} catch (IOException e) {

				}
			}
		}
		return flag;
	}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值