`
lishumingwm163.com
  • 浏览: 337783 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

ftp 断点上传

    博客分类:
  • java
阅读更多
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.RandomAccessFile;
import java.io.StringWriter;
import java.util.Properties;
import java.util.StringTokenizer;

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

/**
*
* Function Description:FTP 功能类,含put和get方法
*/

public class AppendFtp extends FTPClient {

private Properties envs=getEnvVars();

/*private static org.apache.log4j.Logger logger =
     org.apache.log4j.Logger.getLogger(AppendFtp.class);*/



public void logException(Exception ae){
  StringWriter sw= new StringWriter();
  PrintWriter pw =new PrintWriter(sw);
  ae.printStackTrace(pw);
  //logger.info(sw.getBuffer());
}


  public boolean upload(String remote, String fileName, String local) throws IOException {
     ftp.enterLocalPassiveMode();
//        if(fileName.endsWith(".rar") || fileName.endsWith(".zip") || fileName.endsWith(".jar")) {
         ftp.setFileType(FTPClient.BINARY_FILE_TYPE); //2进制文件时,防止文件损坏
//        }
        boolean result;
       
        ftp.changeWorkingDirectory(remote); //进入ftp目录
        boolean isExists = false;
        long fileSize=123;
        FTPFile[] files = ftp.listFiles();
        for (int i = 0; i < files.length; i++) {
            FTPFile file = files[i];
            System.out.println(fileName+"--fileName-------------file.getName()-"+file.getName());
            if(fileName.equals(file.getName())) {
                isExists = true;
                fileSize=file.getSize();
                break;
            }
        }
        if(isExists) {
            //文件存在时, 使用断点上传方式
            System.out.println("fileSize:" + fileSize);
            File fLocal = new File(local);
            OutputStream os=ftp.appendFileStream(fileName);
            RandomAccessFile randomAccessFileLocal = new RandomAccessFile(fLocal, "r");
            randomAccessFileLocal.seek(fileSize);
            int len = 0;
            byte[] bt = new byte[1024];
            while ((len = randomAccessFileLocal.read(bt)) > 0) {
             os.write(bt, 0, len);
            }
            randomAccessFileLocal.close();
            os.close();
            result = true;
        } else {
         System.out.println("create");
            //不存在时, 直接上传
            File f = new File(local);
            FileInputStream in = new FileInputStream(f);
            result = ftp.storeFile(fileName, in);
            in.close();
        }
        if(fileName.indexOf("ExpDat")>-1){
   boolean deleted=new File(local).delete();
   if(deleted)
    System.out.println("delete file ok!");
   else
    System.out.println("delete not ok!");
  }
        System.out.println("upload ok");
        return result;
    }

    /**
     * 建立FTP连接
     */
    public boolean connect(String hostname, int port, String username,
   String password) throws IOException {
     ftp.connect(hostname, port);
  ftp.login(username, password);
  if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {
   disconnect();
   return false;
  }
  return true;
}
   
    /**
     * 关闭FTP连接
     */
    public void disconnect() throws IOException {
  if (ftp.isConnected()) {
   ftp.disconnect();
  }
}
    public FTPClient ftp;
    public void sss(){
     ftp=new FTPClient();
     File fExpDat=new File(envs.getProperty("COMPIERE_HOME")+"/data/ExpDat.jar");
     File fCompiereJar=new File(envs.getProperty("COMPIERE_HOME")+"/lib/Compiere.jar");  
     String ExpDatPath=fExpDat.getPath();
     String CompiereJarPath=fCompiereJar.getPath();
     System.out.println("==ExpDatPath=="+ExpDatPath);
     System.out.println("==CompiereJarPath=="+CompiereJarPath);
     try {
       if(connect("www.zoapcon.com",21,"zoap","zoapfaxftp"))
        System.out.println("login ok!");
       upload("Alison","ExpDat.jar",ExpDatPath);
    upload("Alison","Compiere.jar",CompiereJarPath);
  } catch (IOException e) {
   e.printStackTrace();
  }finally{
   try {
    disconnect();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
    }
   
  public static void main(String[] args){
   AppendFtp ftpClient = new AppendFtp();
   ftpClient.sss();
  }
 
  public static Properties getEnvVars() {
   Process p = null;
   Properties envVars = new Properties();
   try {
   
    Runtime r = Runtime.getRuntime();
    String OS = System.getProperty("os.name").toLowerCase();
    // System.out.println(OS);
    if (OS.indexOf("windows 9") > -1) {
     p = r.exec("command.com /c set");
    } else if ((OS.indexOf("nt") > -1)
      || (OS.indexOf("windows 20") > -1)
      || (OS.indexOf("windows xp") > -1)) {
     // thanks to JuanFran for the xp fix!
     p = r.exec("cmd.exe /c set");
    } else {
     // our last hope, we assume Unix (thanks to H. Ware for the fix)
     p = r.exec("env");
    }
    BufferedReader br = new BufferedReader(new InputStreamReader(p
      .getInputStream()));
    String line;
    while ((line = br.readLine()) != null) {
     int idx = line.indexOf('=');
     String key = line.substring(0, idx);
     String value = line.substring(idx + 1);
     envVars.setProperty(key, value);
     // System.out.println( key + " = " + value );
    }
   } catch (IOException ioe) {
    ioe.printStackTrace();
   }
   return envVars;
  }
}
分享到:
评论

相关推荐

    FTP断点上传与断点下载

    综上所述,FTP断点上传和断点下载是提高大文件传输效率的关键技术,VS2005提供了一套完善的工具和类库来实现这些功能。开发者可以通过理解FTP的工作原理和.NET Framework的FTP支持,创建可靠的断点续传功能,提升...

    WPF ftp断点上传下载

    在IT领域,尤其是在Windows Presentation Foundation (WPF)的开发中,构建一个支持FTP断点上传和下载的功能是一项常见的任务。WPF是微软提供的一种用于构建桌面应用的UI框架,而FTP(File Transfer Protocol)则是一...

    python ftp断点上传下载

    python ftp断点上传下载,支持主、从模式断点上传及下载

    java ftp断点上传和下载

    以上就是使用Java和Apache Commons Net库实现FTP断点续传的基本步骤。在实际应用中,你可能还需要处理异常,优化文件读写性能,以及考虑其他因素,如重试机制、错误处理等。了解这些知识点将使你能够高效地实现在...

    ftp 断点上传、下载demo

    基于apache commons-net.3.2.jar包开发,能实现ftp断点上传、下载、创建目录、切换目录等功能。 说明:需要安装ftp服务器如server-u,filezila等。直接导出的myeclipse java 工程,导入既可以。 环境:myeclipse8.5+...

    JAVA实现FTP断点上传的方法

    在Java中实现FTP断点上传是一项常见的任务,特别是在文件传输需求中。Apache Commons Net库提供了一个强大且方便的API来处理FTP操作,包括断点上传。以下是对标题和描述中所述知识点的详细解释: 首先,我们需要...

    c#制作FTP上传(支持断点续传)

    在本文中,我们将深入探讨如何使用C#编程语言来实现FTP(文件传输协议)上传功能,特别是支持断点续传的特性。FTP是一种标准网络协议,用于在客户端和服务器之间交换文件。C#中的System.Net命名空间提供了丰富的类库...

    FTP 多线程断点上传

    总的来说,多线程FTP断点上传是一项复杂但高效的文件上传技术,它结合了多线程并行处理的优势和断点续传的容错性,是现代FTP客户端软件不可或缺的功能。在实际开发中,需要对网络协议、多线程编程和错误处理有深入的...

    实现ftp断点下载和上传

    在实现FTP断点下载和上传时,通常会使用编程语言中的FTP库或工具。例如,在Java中,可以使用Apache Commons Net库,它提供了FTPClient类来支持FTP功能,包括断点续传。Python中则有ftplib模块,同样可以处理此类...

    FTP上传(断点续传)更新进度条

    实现FTP断点续传的关键在于保存和识别已传输的数据位置。这通常通过记录文件的当前位置(偏移量)和已传输的字节数来完成。当上传暂停后,客户端可以记住这个位置,再次连接时,只需从上次断开的地方开始继续传输。 ...

    利用libcurl实现ftp断点续传

    要利用libcurl实现FTP断点续传,首先需要了解libcurl的基本用法。在提供的压缩包中,可能包含libcurl的动态链接库(dll)、静态库(lib)、头文件(.h)以及示例代码(cpp)。这些文件是构建使用libcurl的C/C++程序...

    FTP_linux.rar_FTP_linux_Linux FTP源代码_ftp断点续传_linux ftp_断点上传

    本设计实现了ftp的设计,使用了socket网络编程,ftp基于cs模式,包含客户端和服务端,可以实现上传、下载、删除、添加等各种功能,支持断点续传、多用户登陆、错误日志等功能。运行环境是linux,压缩包内含有源代码...

    FTP上传下载的断点续传实现

    linux下C语言实现FTP支持断点续传的上传和下载

    C# ftp 客户端支持断点上传

    标题中的"C# ftp 客户端支持断点上传"指的是开发一个C#程序,该程序能够作为FTP客户端,并且具备在上传过程中暂停和恢复的能力。这通常涉及到以下几个关键技术点: 1. **FTP协议理解**:FTP协议包括两个通道,控制...

    xuchuanftp_java_FTP断点续传_

    标题"XuChuanFTP_Java_FTP断点续传"可能是指一个Java实现的FTP客户端库或者一个示例项目,专注于支持FTP的断点续传功能。这个项目可能是为了帮助开发者更方便地处理大文件的上传任务,尤其是在网络不稳定的情况下。 ...

    ftp 断点续传实现

    ftp 断点续传实现 FTP 是一个非常常用的文件传输协议,它可以帮助用户上传和下载文件到远程服务器中。...通过了解 FTP 协议和断点续传的实现方法,我们可以更好地使用 FTP 协议来上传和下载文件。

    ftp.rar_FTP 断点续传_Java FTP上传_ftp 断点_ftp断点续传Java_java ftp

    在这个Java FTP项目中,我们关注的是如何实现FTP的断点续传功能,以及如何利用Java进行多线程FTP上传。 断点续传是FTP的一个重要特性,它允许在文件传输中断后从上次停止的地方继续,而不是重新开始整个文件的传输...

    c#上传下载ftp(支持断点续传)

    c#上传下载ftp(支持断点续传) 代码完全通俗易懂 注释完整

    Ftp断点续传源码.rar

    FTP断点续传是网络上传下载技术中的一个重要概念,它允许用户在中断连接后从上次停止的地方继续传输文件,极大地提高了文件传输的效率和可靠性。本压缩包“Ftp断点续传源码.rar”提供了使用Delphi编程语言实现FTP...

Global site tag (gtag.js) - Google Analytics