javaftp续传(java ftp传输文件)

华为云服务器特价优惠火热进行中!

2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。

合作流程:
1、点击链接注册/关联华为云账号:点击跳转
2、添加客服微信号:cloud7591,确定产品方案、价格方案、服务支持方案等;
3、客服协助购买,并拉微信技术服务群,享受一对一免费技术支持服务;
技术专家在金蝶、华为、腾讯原厂有多年工作经验,并已从事云计算服务8年,可对域名、备案、网站搭建、系统部署、AI人工智能、云资源规划等上云常见问题提供更专业靠谱的服务,对相应产品提供更优惠的报价和方案,欢迎咨询。

今天给各位分享javaftp续传的知识,其中也会对java ftp传输文件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

微信号:cloud7591
如需了解更多,欢迎添加客服微信咨询。
复制微信号

本文目录一览:

java中怎么实现ftp文件传输

package com.quantongfu.;

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.;

import org.apache.log4j.Logger;

import org.apache.log4j.net.SocketServer;

import com.quantongfu.conf.FtpConf;

/**

 * @项目名称: telinSyslog

 * @文件名称: 

 * @创建日期:2015年9月14日 下午3:22:08

 * @功能描述:ftp实体类,用于连接,上传

 * @修订记录:

 */

public class Ftp {

    private static Logger logger = Logger.getLogger();

    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;

        (FtpConf.FTP_HOST, FtpConf.FTP_PORT);

        (FtpConf.FTP_USER_NAME, FtpConf.FTP_PASSWORD);

        ;

        ;

        reply = ;

        if (!FTPReply.isPositiveCompletion(reply)) {

            ;

            return result;

        }

        if (FtpConf.IS_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 = (file.getName() + ".tmp", input);

            if (b) {

                b = (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 = (server, file.getName() + ".tmp", input);

            if (b) {

                b = (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) {

                ;

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

        /*获取连接*/

    public static Ftp getFtp() {

        Ftp ftp = new Ftp();

        try {

            ;

        } catch (Exception e) {

            logger.error("FTP连接异常" + e.getMessage());

            e.printStackTrace();

        }

        return ftp;

    }

        /*重连*/

    public Ftp reconnect() {

        disConnect();

        return getFtp();

    }

}

使用Apache FtpClient jar包,获取jar :

JSharer 如何上传...

资源上传

4.1 怎么上传文件

登录之后点击JSharer任何页面上方导航栏——我的资源——上传文件 即可开始上传。目前JSharer支持普通上传、JAVA插件上传和FTP上传。 普通方式上传适合200Mb以下的小型文件,只需要常用的Flash插件即可以上传,但是中断后无法续传。 JAVA插件上传适合大中型文件,需要下载安装插件,中断之后可以续传。 FTP方式上传可以快速批量上传,需要使用FTP软件,中断后也可以续缓存,支持FXP(服务器对传功能)。JSharer推荐您在大部分情况下使用FTP上传功能上传资源。

4.2 怎么批量上传文件

使用FTP客户端软件的上传队列功能,您将可以轻松的完成批量上传。

4.3 怎么才能续传文件

当您使用FTP上传功能时,通过各种FTP软件客户端的设置即可完成文件续传。 当您使用JAVA上传功能时,只需重新访问JAVA上传页并选择之前上传的文件即可开始自动续传。

4.4 怎么使用FTP上传

首先注册一个帐号,在首页点击注册。请正确填写好注册资料,特别是E-mail地址,JSharer将会发送一封激活邮件至您的注册邮箱,在您点击该邮件中的链接激活帐号后您就可以开始使用JSharer了。 注意:请在12小时内完成激活,12小时后未激活的帐号,帐号名称将被系统重新回收。

java ftp怎么实现java ftp方式的断点续传

运用类的办法,编程人员能够长途登录到FTP服务器,罗列该服务器上的目录,设置传输协议,以及传送文件。FtpClient类涵 盖了简直一切FTP的功用,FtpClient的实例变量保留了有关树立"署理"的各种信息。下面给出了这些实例变量:

public static boolean useFtpProxy

这个变量用于标明FTP传输过程中是不是运用了一个署理,因此,它实际上是一个符号,此符号若为TRUE,标明运用了一个署理主机。

public static String ftpProxyHost

此变量只要在变量useFtpProxy为TRUE时才有用,用于保留署理主机名。

public static int ftpProxyPort

此变量只要在变量useFtpProxy为TRUE时才有用,用于保留署理主机的端口地址。

FtpClient有三种不同方式的结构函数,如下所示:

1、public FtpClient(String hostname,int port)

此结构函数运用给出的主机名和端口号树立一条FTP衔接。

2、public FtpClient(String hostname)

此结构函数运用给出的主机名树立一条FTP衔接,运用默许端口号。

3、FtpClient()

此结构函数将创立一FtpClient类,但不树立FTP衔接。这时,FTP衔接能够用openServer办法树立。

一旦树立了类FtpClient,就能够用这个类的办法来翻开与FTP服务器的衔接。类ftpClient供给了如下两个可用于翻开与FTP服务器之间的衔接的办法。

public void openServer(String hostname)

这个办法用于树立一条与指定主机上的FTP服务器的衔接,运用默许端口号。

怎么用Java实现FTP上传

sun.net..,该类库主要提供了用于建立FTP连接的类。利用这些类的方法,编程人员可以远程登录到FTP服务器,列举该服务器上的目录,设置传输协议,以及传送文件。FtpClient类涵盖了几乎所有FTP的功能,FtpClient的实例变量保存了有关建立"代理"的各种信息。下面给出了这些实例变量:

public static boolean useFtpProxy

这个变量用于表明FTP传输过程中是否使用了一个代理,因此,它实际上是一个标记,此标记若为TRUE,表明使用了一个代理主机。

public static String ftpProxyHost

此变量只有在变量useFtpProxy为TRUE时才有效,用于保存代理主机名。

public static int ftpProxyPort此变量只有在变量useFtpProxy为TRUE时才有效,用于保存代理主机的端口地址。

FtpClient有三种不同形式的构造函数,如下所示:

1、public FtpClient(String hostname,int port)

 此构造函数利用给出的主机名和端口号建立一条FTP连接。

2、public FtpClient(String hostname)

此构造函数利用给出的主机名建立一条FTP连接,使用默认端口号。

3、FtpClient()

此构造函数将创建一FtpClient类,但不建立FTP连接。这时,FTP连接可以用openServer方法建立。

一旦建立了类FtpClient,就可以用这个类的方法来打开与FTP服务器的连接。类ftpClient提供了如下两个可用于打开与FTP服务器之间的连接的方法。

public void openServer(String hostname)

这个方法用于建立一条与指定主机上的FTP服务器的连接,使用默认端口号。

public void openServer(String host,int port)

这个方法用于建立一条与指定主机、指定端口上的FTP服务器的连接。

打开连接之后,接下来的工作是注册到FTP服务器。这时需要利用下面的方法。

public void login(String username,String password)

此方法利用参数username和password登录到FTP服务器。使用过Intemet的用户应该知道,匿名FTP服务器的登录用户名为anonymous,密码一般用自己的电子邮件地址。

下面是FtpClient类所提供的一些控制命令。

public void cd(String remoteDirectory):该命令用于把远程系统上的目录切换到参数remoteDirectory所指定的目录。

public void cdUp():该命令用于把远程系统上的目录切换到上一级目录。

public String pwd():该命令可显示远程系统上的目录状态。

public void binary():该命令可把传输格式设置为二进制格式。

public void ascii():该命令可把传输协议设置为ASCII码格式。

public void rename(String string,String string1):该命令可对远程系统上的目录或者文件进行重命名操作。

除了上述方法外,类FtpClient还提供了可用于传递并检索目录清单和文件的若干方法。这些方法返回的是可供读或写的输入、输出流。下面是其中一些主要的方法。

public TelnetInputStream list()

返回与远程机器上当前目录相对应的输入流。

public TelnetInputStream get(String filename)

获取远程机器上的文件filename,借助TelnetInputStream把该文件传送到本地。

public TelnetOutputStream put(String filename)

以写方式打开一输出流,通过这一输出流把文件filename传送到远程计算机

package myUtil;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import java.util.StringTokenizer;

import sun.net.TelnetInputStream;

import sun.net.TelnetOutputStream;

import sun.net.;

/**

* ftp上传,下载

*

* @author why 2009-07-30

*

*/

public class FtpUtil {

private String ip = "";

private String username = "";

private String password = "";

private int port = -1;

private String path = "";

FtpClient ftpClient = null;

OutputStream os = null;

FileInputStream is = null;

public FtpUtil(String serverIP, String username, String password) {

this.ip = serverIP;

this.username = username;

this.password = password;

}

public FtpUtil(String serverIP, int port, String username, String password) {

this.ip = serverIP;

this.username = username;

this.password = password;

this.port = port;

}

/**

* 连接ftp服务器

*

* @throws IOException

*/

public boolean connectServer() {

ftpClient = new FtpClient();

try {

if (this.port != -1) {

ftpClient.openServer(this.ip, this.port);

} else {

ftpClient.openServer(this.ip);

}

ftpClient.login(this.username, this.password);

if (this.path.length() != 0) {

ftpClient.cd(this.path);// path是ftp服务下主目录的子目录

}

ftpClient.binary();// 用2进制上传、下载

System.out.println("已登录到\"" + ftpClient.pwd() + "\"目录");

return true;

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 断开与ftp服务器连接

*

* @throws IOException

*/

public boolean closeServer() {

try {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

if (ftpClient != null) {

ftpClient.closeServer();

}

System.out.println("已从服务器断开");

return true;

} catch (IOException e) {

e.printStackTrace();

return false;

}

}

/**

* 检查文件夹在当前目录下是否存在

*

* @param dir

*@return

*/

private boolean isDirExist(String dir) {

String pwd = "";

try {

pwd = ftpClient.pwd();

ftpClient.cd(dir);

ftpClient.cd(pwd);

} catch (Exception e) {

return false;

}

return true;

}

/**

* 在当前目录下创建文件夹

*

* @param dir

* @return

* @throws Exception

*/

private boolean createDir(String dir) {

try {

ftpClient.ascii();

StringTokenizer s = new StringTokenizer(dir, "/"); // sign

s.countTokens();

String pathName = ftpClient.pwd();

while (s.hasMoreElements()) {

pathName = pathName + "/" + (String) s.nextElement();

try {

ftpClient.sendServer("MKD " + pathName + "\r\n");

} catch (Exception e) {

e = null;

return false;

}

ftpClient.readServerResponse();

}

ftpClient.binary();

return true;

} catch (IOException e1) {

e1.printStackTrace();

return false;

}

}

/**

* ftp上传 如果服务器段已存在名为filename的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换

*

* @param filename

* 要上传的文件(或文件夹)名

* @return

* @throws Exception

*/

public boolean upload(String filename) {

String newname = "";

if (filename.indexOf("/") -1) {

newname = filename.substring(filename.lastIndexOf("/") + 1);

} else {

newname = filename;

}

return upload(filename, newname);

}

/**

* ftp上传 如果服务器段已存在名为newName的文件夹,该文件夹中与要上传的文件夹中同名的文件将被替换

*

* @param fileName

* 要上传的文件(或文件夹)名

* @param newName

* 服务器段要生成的文件(或文件夹)名

* @return

*/

public boolean upload(String fileName, String newName) {

try {

String savefilename = new String(fileName.getBytes("GBK"),

"GBK");

File file_in = new File(savefilename);// 打开本地待长传的文件

if (!file_in.exists()) {

throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");

}

if (file_in.isDirectory()) {

upload(file_in.getPath(), newName, ftpClient.pwd());

} else {

uploadFile(file_in.getPath(), newName);

}

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

return true;

} catch (Exception e) {

e.printStackTrace();

System.err.println("Exception e in Ftp upload(): " + e.toString());

return false;

} finally {

try {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 真正用于上传的方法

*

* @param fileName

* @param newName

* @param path

* @throws Exception

*/

private void upload(String fileName, String newName, String path)

throws Exception {

String savefilename = new String(fileName.getBytes("ISO-8859-1"), "GBK");

File file_in = new File(savefilename);// 打开本地待长传的文件

if (!file_in.exists()) {

throw new Exception("此文件或文件夹[" + file_in.getName() + "]有误或不存在!");

}

if (file_in.isDirectory()) {

if (!isDirExist(newName)) {

createDir(newName);

}

ftpClient.cd(newName);

File sourceFile[] = file_in.listFiles();

for (int i = 0; i sourceFile.length; i++) {

if (!sourceFile[i].exists()) {

continue;

}

if (sourceFile[i].isDirectory()) {

this.upload(sourceFile[i].getPath(), sourceFile[i]

.getName(), path + "/" + newName);

} else {

this.uploadFile(sourceFile[i].getPath(), sourceFile[i]

.getName());

}

}

} else {

uploadFile(file_in.getPath(), newName);

}

ftpClient.cd(path);

}

/**

* upload 上传文件

*

* @param filename

* 要上传的文件名

* @param newname

* 上传后的新文件名

* @return -1 文件不存在 =0 成功上传,返回文件的大小

* @throws Exception

*/

public long uploadFile(String filename, String newname) throws Exception {

long result = 0;

TelnetOutputStream os = null;

FileInputStream is = null;

try {

java.io.File file_in = new java.io.File(filename);

if (!file_in.exists())

return -1;

os = ftpClient.put(newname);

result = file_in.length();

is = new FileInputStream(file_in);

byte[] bytes = new byte[1024];

int c;

while ((c = is.read(bytes)) != -1) {

os.write(bytes, 0, c);

}

} finally {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

}

return result;

}

/**

* 从ftp下载文件到本地

*

* @param filename

* 服务器上的文件名

* @param newfilename

* 本地生成的文件名

* @return

* @throws Exception

*/

public long downloadFile(String filename, String newfilename) {

long result = 0;

TelnetInputStream is = null;

FileOutputStream os = null;

try {

is = ftpClient.get(filename);

java.io.File outfile = new java.io.File(newfilename);

os = new FileOutputStream(outfile);

byte[] bytes = new byte[1024];

int c;

while ((c = is.read(bytes)) != -1) {

os.write(bytes, 0, c);

result = result + c;

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (is != null) {

is.close();

}

if (os != null) {

os.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return result;

}

/**

* 取得相对于当前连接目录的某个目录下所有文件列表

*

* @param path

* @return

*/

public List getFileList(String path) {

List list = new ArrayList();

DataInputStream dis;

try {

dis = new DataInputStream(ftpClient.nameList(this.path + path));

String filename = "";

while ((filename = dis.readLine()) != null) {

list.add(filename);

}

} catch (IOException e) {

e.printStackTrace();

}

return list;

}

public static void main(String[] args) {

FtpUtil ftp = new FtpUtil("192.168.11.11", "111", "1111");

;

boolean result = ("C:/Documents and Settings/ipanel/桌面/java/Hibernate_HQL.docx", "amuse/audioTest/music/Hibernate_HQL.docx");

System.out.println(result ? "上传成功!" : "上传失败!");

;

/**

* FTP远程命令列表 USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT PASS PASV STOR

* REST CWD STAT RMD XCUP OPTS ACCT TYPE APPE RNFR XCWD HELP XRMD STOU

* AUTH REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ QUIT MODE SYST ABOR

* NLST MKD XPWD MDTM PROT

* 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\n

* ftpclient.sendServer("XMKD /test/bb\r\n"); //执行服务器上的FTP命令

* ftpclient.readServerResponse一定要在sendServer后调用

* nameList("/test")获取指目录下的文件列表 XMKD建立目录,当目录存在的情况下再次创建目录时报错 XRMD删除目录

* DELE删除文件

*/

}

}

java ftp上传时断网,文件损坏

以二进制流上传,然后实现断点续传。

/**

* 上传文件到FTP服务器,支持断点续传

* @param local 本地文件名称,绝对路径

* @param remote 远程文件路径,使用/home/directory1/subdirectory/file.ext 按照Linux上的路径指定方式,支持多级目录嵌套,支持递归创建不存在的目录结构

* @return 上传结果

* @throws IOException

*/

public UploadStatus upload(String local,String remote) throws IOException{

FTPClient ftpClient = new FTPClient();

//设置PassiveMode传输

ftpClient.enterLocalPassiveMode();

//设置以二进制流的方式传输

ftpClient.setFileType();

UploadStatus result;

//对远程目录的处理

String remoteFileName = remote;

if(remote.contains("/")){

remoteFileName = remote.substring(remote.lastIndexOf("/")+1);

String directory = remote.substring(0,remote.lastIndexOf("/")+1);

if(!directory.equalsIgnoreCase("/")!ftpClient.changeWorkingDirectory(directory)){

//如果远程目录不存在,则递归创建远程服务器目录

int start=0;

int end = 0;

if(directory.startsWith("/")){

start = 1;

}else{

start = 0;

}

end = directory.indexOf("/",start);

while(true){

String subDirectory = remote.substring(start,end);

if(!ftpClient.changeWorkingDirectory(subDirectory)){

if(ftpClient.makeDirectory(subDirectory)){

ftpClient.changeWorkingDirectory(subDirectory);

}else {

System.out.println("创建目录失败");

return UploadStatus.Create_Directory_Fail;

}

}

start = end + 1;

end = directory.indexOf("/",start);

//检查所有目录是否创建完毕

if(end = start){

break;

}

}

}

}

//检查远程是否存在文件

FTPFile[] files = ftpClient.listFiles(remoteFileName);

if(files.length == 1){

long remoteSize = files[0].getSize();

File f = new File(local);

long localSize = f.length();

if(remoteSize==localSize){

return UploadStatus.File_Exits;

}else if(remoteSize localSize){

return UploadStatus.Remote_Bigger_Local;

}

//尝试移动文件内读取指针,实现断点续传

InputStream is = new FileInputStream(f);

if(is.skip(remoteSize)==remoteSize){

ftpClient.setRestartOffset(remoteSize);

if(ftpClient.storeFile(remote, is)){

return UploadStatus.Upload_From_Break_Success;

}

}

//如果断点续传没有成功,则删除服务器上文件,重新上传

if(!ftpClient.deleteFile(remoteFileName)){

return UploadStatus.Delete_Remote_Faild;

}

is = new FileInputStream(f);

if(ftpClient.storeFile(remote, is)){

result = UploadStatus.Upload_New_File_Success;

}else{

result = UploadStatus.Upload_New_File_Failed;

}

is.close();

}else {

InputStream is = new FileInputStream(local);

if(ftpClient.storeFile(remoteFileName, is)){

result = UploadStatus.Upload_New_File_Success;

}else{

result = UploadStatus.Upload_New_File_Failed;

}

is.close();

}

return result;

}

java如何实现将FTP文件转移到另一个FTP服务器上

你有FTPClient就比较好办,假如你的两台FTP服务器分别为fs1和fs2

在本地开发代码思路如下:

通过FTPClient连接上fs1,然后下载(可以循环批量下载)到本地服务器,保存到一个临时目录。

下载完成后,FTPClient断开与fs1的连接,记得必须logout。

本地服务器通过FileInputStream将刚下载到临时目录的文件读进来,得到一个ListFile集合。

通过FTPClient连接上fs2,循环ListFile集合,将文件上传至fs2的特定目录,然后清空临时目录,上传完毕后,断开fs2的连接,同样必须logout。

javaftp续传的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java ftp传输文件、javaftp续传的信息别忘了在本站进行查找喔。

发布于 2023-04-09 12:04:33
收藏
分享
海报
41
目录

    忘记密码?

    图形验证码

    复制成功
    微信号: cloud7591
    如需了解更多,欢迎添加客服微信咨询。
    我知道了