java中怎么实现ftp文件传输

 我来答
百度网友386ec23
2016-03-14
知道答主
回答量:13
采纳率:0%
帮助的人:8.8万
展开全部
package com.quantongfu.ftp.ftp;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.util.List;

import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
import org.apache.log4j.net.SocketServer;

import com.quantongfu.conf.FtpConf;

/**
 * @项目名称: telinSyslog
 * @文件名称: Ftp.java
 * @创建日期:2015年9月14日 下午3:22:08
 * @功能描述:ftp实体类,用于连接,上传
 * @修订记录:
 */
public class Ftp {
    private static Logger logger = Logger.getLogger(Ftp.class);
    private FTPClient ftp;

    /**
     * 
     * @param path
     *            上传到ftp服务器哪个路径下
     * @param addr
     *            地址
     * @param port
     *            端口号
     * @param username
     *            用户名
     * @param password
     *            密码
     * @return
     * @throws Exception
     */
    public boolean connect() throws Exception {
        boolean result = false;
        ftp = new FTPClient();
        int reply;
        ftp.connect(FtpConf.FTP_HOST, FtpConf.FTP_PORT);
        ftp.login(FtpConf.FTP_USER_NAME, FtpConf.FTP_PASSWORD);
        ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
        ftp.setDataTimeout(60000);
        reply = ftp.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply)) {
            ftp.disconnect();
            return result;
        }
        if (FtpConf.IS_FTP_DIRECTORY) {
            ftp.changeWorkingDirectory(FtpConf.FTP_DIRECTORY);
        }
        result = true;
        return result;
    }

    /**
     * 
     * @param files
     *            上传的文件
     * @throws Exception
     */
    public boolean upload(File file) throws IOException {
        FileInputStream input = null;
        try {
            input = new FileInputStream(file);
            boolean b = ftp.storeFile(file.getName() + ".tmp", input);
            if (b) {
                b = ftp.rename(file.getName() + ".tmp", file.getName());
            }
            return b;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if (input != null) {
                input.close();
            }
        }
    }

    /**
     * 
     * @param files
     *            上传的文件
     * @throws Exception
     */
    public boolean upload(ServerSocket server, File file) throws Exception {
        FileInputStream input = null;
        try {
            if (!file.exists()) {
                return true;
            }
            input = new FileInputStream(file);
            boolean b = ftp.storeFile(server, file.getName() + ".tmp", input);
            if (b) {
                b = ftp.rename(file.getName() + ".tmp", file.getName());
                if (b) {
                    file.delete();
                }
            }
            return b;
        } catch (Exception e) {
            logger.error("ftp error" + e.getMessage());
            return false;
        } finally {
            if (input != null) {
                try {
                    input.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
        /*断开连接*/
    public void disConnect() {
        try {
            if (ftp != null) {
                ftp.disconnect();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
        /*获取连接*/
    public static Ftp getFtp() {
        Ftp ftp = new Ftp();
        try {
            ftp.connect();
        } catch (Exception e) {
            logger.error("FTP连接异常" + e.getMessage());
            e.printStackTrace();
        }
        return ftp;
    }
        /*重连*/
    public Ftp reconnect() {
        disConnect();
        return getFtp();
    }
}

使用Apache FtpClient jar包,获取jar : http://commons.apache.org/net/

育知同创教育
2016-03-13 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
直接上代码:
package com.sinosoft.sepmis.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

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

/**
* Java自带的API对FTP的操作
* @Title:Ftp.java
* @author: shanhongzhi
*/
public class FtpUtil {
/**
* Description: 向FTP服务器上传文件
* @param url FTP服务器hostname
* @param port FTP服务器端口,如果默认端口请写-1
* @param username FTP登录账号
* @param password FTP登录密码
* @param path FTP服务器保存目录
* @param filename 上传到FTP服务器上的文件名
* @param input 输入流
* @return 成功返回true,否则返回false
*/
public static boolean uploadFile(String url, int port, String username, String password, String path,
String filename, InputStream input) throws Exception
{
boolean success = false;
FTPClient ftp = new FTPClient();
try
{
int reply;

// 连接FTP服务器
if (port > -1)
{
ftp.connect(url, port);
}
else
{
ftp.connect(url);
}

// 登录FTP
ftp.login(username, password);
reply = ftp.getReplyCode();
System.out.println(reply);
if (!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
return success;
}
ftp.changeWorkingDirectory(path);
ftp.storeFile(filename, input);
input.close();
ftp.logout();
success = true;
}
catch (IOException e)
{
success = false;
throw e;
}
finally
{
if (ftp.isConnected())
{
try
{
ftp.disconnect();
}
catch (IOException e)
{
throw e;
}
}
}
return success;
}
public static void main(String agrs[]) {
try {
File file = new File("E:\\1.txt");
FileInputStream in = new FileInputStream(file);
/*
* 使用默认的端口号、用户名、密码以及根目录连接FTP服务器
*/
//返回true上传成功,否则上传失败
// FtpUtil.uploadFile("192.168.61.209", -22, "instiaci", "instiaci", "/db2home/instiaci/personal/shanhz","2.txt",in);
//“sinopipi/IC/tkk"目录要是已经存在的目录
FtpUtil.uploadFile("192.168.61.104", 22, "administrator", "123456", "/sinopipi/IC","6.txt",in);
} catch (Exception e) {
e.printStackTrace();
}
}
}
说明:所需的jar包是commons-net-2.0.jar
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式