原创

Java用ftp上传及下载文件

1.使用FTP服务器首先要建立ftp服务器,百度有很多教程我这里就不再写详细步骤
2.建立好ftp服务器之后,我们先写一个Javaftp工具类
工具类代码如下

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.nio.channels.FileChannel;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * 描述:
 * 测试
 *
 * @author zz001
 * @create 2019-01-16 11:07
 */

public class FtpUtil {
    /**
     * 上传文件
     * @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);
            ftpClient.makeDirectory(pathname);
            ftpClient.changeWorkingDirectory(pathname);
            ftpClient.storeFile(fileName, 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);
            //获取所有文件
            FTPFile[] ftpFiles = ftpClient.listFiles();
            //如果有多个文件名以.csv结尾,则全部删除
            for(FTPFile file : ftpFiles){
                if(file.getName().contains(".csv")){
                    ftpClient.dele(file.getName());
                }
            }
            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();
            //localpath + 今天的日期生成文件路径

            DateFormat format = new SimpleDateFormat("yyMMdd");
            String formatDate = format.format(new Date());
            String filePath = localpath+"/"+formatDate;
            File dir = new File(filePath);
            if(!dir.exists()){//判断文件目录是否存在
                dir.mkdirs();
            }
            for(FTPFile file : ftpFiles){
             //   if(filename.equalsIgnoreCase(file.getName())){
                if(file.getName().contains(".csv")){
                    File localFile = new File(filePath + "/" + file.getName());
                    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 oldpath            要上传的文件
     * @param newpath        新的文件目录 例:D://image/
     * @return
     */
    static public String copyFile(String oldpath,String newpath){

        Boolean flag = false;//定义要初始赋值结果:默认是失败false

        String zy = oldpath.replaceAll("\\\\", "/");
        System.out.println("我是转义后的地址:"+zy);
        File file = new File(zy);

        System.out.println("我是file的地址:"+file.getPath());

        String filename = file.getName();

        String fileType = filename.substring(filename.lastIndexOf("."), filename.length());//获取文件类型.jpg

        String newname = UUID.randomUUID().toString()+fileType;//生成新的文件名称

        flag = file.renameTo(new File(newpath+newname));//开始剪切到新路径

        System.out.println("要上传的文件名称:"+filename);
        System.out.println("要上传的文件路径:"+oldpath);
        System.out.println("新的截切路径:"+newpath+newname);

        System.out.println("复制情况:"+flag);
        String newfile =null;

        if(!file.exists()){
            newfile=newname;
            file.delete();
        }else{

            newfile="失败";
            file.delete();
        }


        return newfile;

    }




    /**
     * 文件复制NIO
     * @param source            被复制的文件来源
     * @param dest                被粘贴的文件
     * @throws IOException        IO流异常
     */
    static public void copyFileUsingFileChannels(File source,File dest) throws IOException{

        FileChannel insert=null;
        FileChannel output=null;

        try {

            insert =new FileInputStream(source).getChannel();
            output = new FileOutputStream(dest).getChannel();
            output.transferFrom(insert, 0, insert.size());

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            insert.close();
            output.close();
        }


    }


    /**
     * 根据设置的宽高等比例压缩图片文件<br> 先保存原文件,再压缩、上传
     * @param oldFile  要进行压缩的文件
     * @param newFile  新文件
     * @param width  宽度 //设置宽度时(高度传入0,等比例缩放)
     * @param height 高度 //设置高度时(宽度传入0,等比例缩放)
     * @param quality 质量
     * @return 返回压缩后的文件的全路径
     */
    public static String zipImageFile(File oldFile,File newFile, int width, int height,float quality) {
        if (oldFile == null) {
            return null;
        }
        try {
            /** 对服务器上的临时文件进行处理 */
            Image srcFile = ImageIO.read(oldFile);
            int w = srcFile.getWidth(null);
            int h = srcFile.getHeight(null);
            double bili;
            if(width>0){
                bili=width/(double)w;
                height = (int) (h*bili);
            }else{
                if(height>0){
                    bili=height/(double)h;
                    width = (int) (w*bili);
                }
            }

            String srcImgPath = newFile.getAbsoluteFile().toString();
            System.out.println(srcImgPath);
            String subfix = "jpg";
            subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1,srcImgPath.length());

            BufferedImage buffImg = null;
            if(subfix.equals("png")){
                buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
            }else{
                buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            }

            Graphics2D graphics = buffImg.createGraphics();
            graphics.setBackground(new Color(255,255,255));
            graphics.setColor(new Color(255,255,255));
            graphics.fillRect(0, 0, width, height);
            graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

            ImageIO.write(buffImg, subfix, new File(srcImgPath));

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newFile.getAbsolutePath();
    }

    /**
     * 按设置的宽度高度压缩图片文件<br> 先保存原文件,再压缩、上传
     * @param oldFile  要进行压缩的文件全路径
     * @param newFile  新文件
     * @param width  宽度
     * @param height 高度
     * @param quality 质量
     * @return 返回压缩后的文件的全路径
     */
    public static String zipWidthHeightImageFile(File oldFile,File newFile, int width, int height,float quality) {
        if (oldFile == null) {
            return null;
        }
        String newImage = null;
        try {
            /** 对服务器上的临时文件进行处理 */
            Image srcFile = ImageIO.read(oldFile);

            String srcImgPath = newFile.getAbsoluteFile().toString();
            System.out.println(srcImgPath);
            String subfix = "jpg";
            subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".")+1,srcImgPath.length());

            BufferedImage buffImg = null;
            if(subfix.equals("png")){
                buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
            }else{
                buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            }

            Graphics2D graphics = buffImg.createGraphics();
            graphics.setBackground(new Color(255,255,255));
            graphics.setColor(new Color(255,255,255));
            graphics.fillRect(0, 0, width, height);
            graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);

            ImageIO.write(buffImg, subfix, new File(srcImgPath));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newImage;
    }

}

这样调用工具类中的方法就可以进行文件的操作了,对你有用请点攒!

正文到此结束
本文目录