java Java上传FTP之JDK1.7

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java Java上传FTP之JDK1.7相关的知识,希望对你有一定的参考价值。

package com.boonya.upload.util.simple;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
import sun.net.ftp.FtpProtocolException;
/**
 * Java自带的API对FTP的操作
 * @Jdk:version 1.7
 * @Title:Ftp.java
 * @author: boonya
 * @notice: 貌似此方法有个缺陷,不能操作大文件
 */
public class FtpJdk
{
    /**
     * 
     * 本地文件名
     */
    private String localfilename;
    /**
     * 
     * 远程文件名
     */
    private String remotefilename;
    /**
     * 
     * FTP客户端
     */
    private FtpClient ftpClient;

    /**
     * 服务器连接
     * 
     * @param ip
     *            服务器IP
     * @param port
     *            服务器端口
     * @param user
     *            用户名
     * @param password
     *            密码
     * @param path
     *            服务器路径
     * @throws FtpProtocolException
     * 
     */
    public void connectServer(String ip, int port, String user, String password, String path) throws FtpProtocolException
    {
        try
        {
            /* ******连接服务器的两种方法****** */
            // 第一种方法
            /*
             * ftpClient =FtpClient.create();
             * ftpClient.connect(new InetSocketAddress(ip, port));
             */
            // 第二种方法
            ftpClient = FtpClient.create(ip);
            ftpClient.login(user, null, password);
            // 设置成2进制传输
            ftpClient.setBinaryType();
            System.out.println("login success!");

            if (path.length() != 0)
            {
                // 把远程系统上的目录切换到参数path所指定的目录
                ftpClient.changeDirectory(path);
            }
            ftpClient.setBinaryType();
        } catch (IOException ex)
        {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }

    }

    /**
     * 关闭连接
     * 
     */

    public void closeConnect()
    {
        try
        {
            ftpClient.close();
            System.out.println("disconnect success");
        } catch (IOException ex)
        {
            System.out.println("not disconnect");
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }
    }

    /**
     * 
     * 上传文件
     * 
     * @param localFile
     *            本地文件
     * @param remoteFile
     *            远程文件
     * @throws FtpProtocolException
     */
    public void upload(String localFile, String remoteFile) throws FtpProtocolException
    {
        this.localfilename = localFile;
        this.remotefilename = remoteFile;
        TelnetOutputStream os = null;
        FileInputStream is = null;
        try
        {
            // 将远程文件加入输出流中
            os = (TelnetOutputStream) ftpClient.putFileStream(this.remotefilename, true);

            // 获取本地文件的输入流
            File file_in = new File(this.localfilename);
            is = new FileInputStream(file_in);

            // 创建一个缓冲区
            byte[] bytes = new byte[1024];
            int c;
            while ((c = is.read(bytes)) != -1)
            {
                os.write(bytes, 0, c);
            }
            System.out.println("upload success");
        } catch (IOException ex)
        {
            System.out.println("not upload");
            ex.printStackTrace();
            throw new RuntimeException(ex);
        } finally
        {
            try
            {
                if (is != null)
                {
                    is.close();
                }
            } catch (IOException e)
            {
                e.printStackTrace();
            } finally
            {
                try
                {
                    if (os != null)
                    {
                        os.close();
                    }
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 
     * 下载文件
     * 
     * @param remoteFile
     *            远程文件路径(服务器端)
     * @param localFile
     *            本地文件路径(客户端)
     * @throws FtpProtocolException
     * 
     */
    public void download(String remoteFile, String localFile) throws FtpProtocolException
    {
        TelnetInputStream is = null;
        FileOutputStream os = null;
        try
        {

            // 获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。
            is = (TelnetInputStream) ftpClient.getFileStream(remoteFile);
            File file_in = new File(localFile);
            os = new FileOutputStream(file_in);

            byte[] bytes = new byte[1024];
            int c;
            while ((c = is.read(bytes)) != -1)
            {
                os.write(bytes, 0, c);
            }
            System.out.println("download success");
        } catch (IOException ex)
        {
            System.out.println("not download");
            ex.printStackTrace();
            throw new RuntimeException(ex);
        } finally
        {
            try
            {
                if (is != null)
                {
                    is.close();
                }
            } catch (IOException e)
            {
                e.printStackTrace();
            } finally
            {
                try
                {
                    if (os != null)
                    {
                        os.close();
                    }
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 函数入口
     * 
     * @param agrs
     */
    public static void main(String agrs[])
    {

        String filepath[] =
        { "/temp/aa.txt", "/temp/regist.log" };
        String localfilepath[] =
        { "C:\\tmp\\1.txt", "C:\\tmp\\2.log" };
        FtpJdk ftp = new FtpJdk();
        /*
         * 使用默认的端口号、用户名、密码以及根目录连接FTP服务器
         */
        try
        {
            ftp.connectServer("127.0.0.1", 22, "boonya", "user@", "/temp");
        } catch (FtpProtocolException e)
        {
            e.printStackTrace();
        }
        // 下载
        for (int i = 0; i < filepath.length; i++)
        {
            try
            {
                ftp.download(filepath[i], localfilepath[i]);
            } catch (FtpProtocolException e)
            {
                e.printStackTrace();
            }
        }
        String localfile = "E:\\contact.txt";
        String remotefile = "/temp/records.txt";
        // 上传
        try
        {
            ftp.upload(localfile, remotefile);
        } catch (FtpProtocolException e)
        {
            e.printStackTrace();
        }
        ftp.closeConnect();
    }

}

以上是关于java Java上传FTP之JDK1.7的主要内容,如果未能解决你的问题,请参考以下文章

jdk1.7 上传文件至ftp服务器

系统运维系列 之实现Ftp上传下载文件(java应用)

java(jdk1.7) IO系列01之InputStream和OutputStream解析

怎么用Java实现FTP上传

用java完成文件ftp上传下载

java操作ftp上传下载