使用apache commons-net包实现文件ftp上传

简介:

使用apache commons-net包实现文件ftp上传

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.SocketTimeoutException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FtpTool {

 private static FTPClient ftp;

 public static FTPClient ftp_conn(String server, String user, String password) {

  ftp = new FTPClient();
  // ftp.setDefaultTimeout(5000);
  try {
   int reply;

   ftp.connect(server);
   // ftp.connect(server,21,InetAddress.getLocalHost(),21);
   System.out.println("Connected to " + server + ".");
   System.out.println(ftp.getReplyString());


   reply = ftp.getReplyCode();

   if (!FTPReply.isPositiveCompletion(reply)) {
    ftp.disconnect();
    System.out.println("FTP server refused connection.");
    return null;
   } else {
    ftp.login(user, password);
    System.out.println("Login success.");
    ftp.pasv();
    ftp.enterLocalPassiveMode();
   }
  } catch (SocketTimeoutException ste) {
   ste.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return ftp;
 }

 /**
  * @param ftp
  * @param remoteFile
  * @param localFile
  * @return
  * @throws FileNotFoundException
  */
 public static boolean uploadToFtp(FTPClient ftp, String remoteFile,
   String localFile) throws FileNotFoundException {

  boolean result = false;
  if (ftp == null) {
   return result;
  }

  String dir = "/";
  remoteFile = remoteFile.replaceAll("\\\\", "/");
  if (remoteFile.indexOf("/") != -1) {
   dir = (String) remoteFile.subSequence(0, remoteFile.lastIndexOf("/"));
  }

  FileInputStream fis = new FileInputStream(new File(localFile));

  System.out.println("Upload " + localFile + " To " + remoteFile);
  try {
   ftp.makeDirectory(dir);
   ftp.changeWorkingDirectory(dir);
   ftp.setFileType(FTP.BINARY_FILE_TYPE); // 以BINARY格式传送文件
   if (ftp.storeFile(remoteFile, fis)) {
    result = true;
   }
   // System.out.println(ftp.getReplyCode());
   fis.close();
  } catch (Exception e) {
   e.printStackTrace();
  }

  return result;
 }
 
 public static void logout(FTPClient ftp) {
  try {
   if (ftp != null) {
    ftp.logout();
    ftp.disconnect();
   }
   ftp = null;
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

}


测试代码;


import java.io.FileNotFoundException;
import java.io.IOException;

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

 

public class FtpTest {

 /**
  * @param args
  */
 public static void main(String[] args) {

 
  String ftp_server = "192.168.0.1";
  String ftp_user = "username";
  String ftp_password ="password";
  FTPClient ftp = FtpTool.ftp_conn(ftp_server, ftp_user, ftp_password);
  
  String localFilename="D:\\html\\test.html";
  
  String remoteFilename="/mytest/002/test.html";
  
  
     System.out.println("upload ...");
     System.out.println(localFilename + " to " + remoteFilename);
     try {
      FtpTool.uploadToFtp(ftp, remoteFilename, localFilename);
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
    
  try {
   ftp.logout();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  if (ftp.isConnected()) {
   try {
    ftp.disconnect();
   } catch (IOException ioe) {
    ioe.printStackTrace();
   }
  }
  
  

 }

}


相关jar包: apache commons-net-1.4.1.jar


 

目录
相关文章
|
27天前
|
开发框架 .NET 测试技术
了解 .NET 9 中的新 Microsoft.AspNetCore.OpenApi 包,并将其与 NSwag 和 Swashbuckle.AspNetCore 进行比较。
本文介绍了 `.NET 9` 中新推出的 `Microsoft.AspNetCore.OpenApi` 包,该包旨在为 `ASP.NET Core` 应用程序生成 `OpenAPI` 文档。文章对比了 `NSwag` 和 `Swashbuckle.AspNetCore` 两大现有库,探讨了新包的优势和不足,特别是在性能和功能方面。尽管新包在某些方面尚不及成熟库完善,但其对原生 `AoT` 编译的支持和未来的扩展潜力使其成为一个值得考虑的选择。文章还提供了详细的性能测试数据和优化建议,适合对 `OpenAPI` 文档生成感兴趣的开发者阅读。
63 3
了解 .NET 9 中的新 Microsoft.AspNetCore.OpenApi 包,并将其与 NSwag 和 Swashbuckle.AspNetCore 进行比较。
|
5天前
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
|
29天前
|
分布式计算 大数据 Apache
利用.NET进行大数据处理:Apache Spark与.NET for Apache Spark
【10月更文挑战第15天】随着大数据成为企业决策和技术创新的关键驱动力,Apache Spark作为高效的大数据处理引擎,广受青睐。然而,.NET开发者面临使用Spark的门槛。本文介绍.NET for Apache Spark,展示如何通过C#和F#等.NET语言,结合Spark的强大功能进行大数据处理,简化开发流程并提升效率。示例代码演示了读取CSV文件及统计分析的基本操作,突显了.NET for Apache Spark的易用性和强大功能。
36 1
|
1月前
|
网络安全 Windows
Jetson 学习笔记(十五):FTP协议传输文件
本文介绍了如何使用WinSCP软件通过FTP协议在Windows和Jetson设备之间传输文件,并分享了一些操作经验和技巧。
28 0
Jetson 学习笔记(十五):FTP协议传输文件
|
1月前
|
C# Windows
一款基于.NET开发的简易高效的文件转换器
一款基于.NET开发的简易高效的文件转换器
|
2月前
.NET 压缩/解压文件
【9月更文挑战第5天】在 .NET 中,可利用 `System.IO.Compression` 命名空间进行文件的压缩与解压。首先引入相关命名空间,然后通过 GZipStream 类实现具体的压缩或解压功能。下面提供了压缩与解压文件的方法示例及调用方式,便于用户快速上手操作。
|
2月前
|
Apache
多应用模式下,忽略项目的入口文件,重写Apache规则
本文介绍了在多应用模式下,如何通过编辑Apache的.htaccess文件来重写URL规则,从而实现忽略项目入口文件index.php进行访问的方法。
|
3月前
|
分布式计算 大数据 Apache
跨越界限:当.NET遇上Apache Spark,大数据世界的新篇章如何谱写?
【8月更文挑战第28天】随着信息时代的发展,大数据已成为推动企业决策、科研与技术创新的关键力量。Apache Spark凭借其卓越的分布式计算能力和多功能数据处理特性,在大数据领域占据重要地位。然而,对于.NET开发者而言,如何在Spark生态中发挥自身优势成为一个新课题。为此,微软与Apache Spark社区共同推出了.NET for Apache Spark,使开发者能用C#、F#等语言编写Spark应用,不仅保留了Spark的强大功能,还融合了.NET的强类型系统、丰富库支持及良好跨平台能力,极大地降低了学习门槛并拓展了.NET的应用范围。
73 3
|
3月前
|
Java Windows 容器
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))
|
3月前
|
Java Spring API
Spring框架与GraphQL的史诗级碰撞:颠覆传统,重塑API开发的未来传奇!
【8月更文挑战第31天】《Spring框架与GraphQL:构建现代API》介绍了如何结合Spring框架与GraphQL构建高效、灵活的API。首先通过引入`spring-boot-starter-data-graphql`等依赖支持GraphQL,然后定义查询和类型,利用`@GraphQLQuery`等注解实现具体功能。Spring的依赖注入和事务管理进一步增强了GraphQL服务的能力。示例展示了从查询到突变的具体实现,证明了Spring与GraphQL结合的强大潜力,适合现代API设计与开发。
134 0