(一)、Sun FtpClient

2023-11-19

项目实践中遇到Ftp传输问题,在这里做个专辑。
第一篇还是介绍一下sun提供的FtpClient.这个也是网上说的最多的,在这里我只是给出例程,不再做详细的解释。sun提供的FtpClient简单宜用,不支持任何加密方式;并没有提供相应的api,所以给我们调试带来不便,与其说是sun足够自信说这个组件简单到不用api就可以完全满足应用,还不如说不负责任。其实在开发中会遇到各种问题,实践中就遇到上传文件到一定数量级后传输会变慢(很慢),但程序并不报错;用ftp客户端桌面软件测试发现连续传输1000个左右文件报错率为4,可能FtpClient在开发时候对异常捕捉不全面。但如果在小数据量和没有用加密方式认证和传输的情况下,FtpClient仍不失是一个很好的选择。
下面是例程:

 

Java代码 复制代码
  1. public class TestFtpClient {   
  2.   
  3.     /**  
  4.      * @param args  
  5.      */  
  6.     public static void main(String[] args) {   
  7.         FtpClient ftpClient;   
  8.         // server:FTP服务器的IP地址   
  9.         String server = "127.0.0.1";   
  10.         // user:登录FTP服务器的用户名   
  11.         String user = "username";   
  12.         // password:登录FTP服务器的用户名的口令   
  13.         String password = "password";   
  14.         // path:FTP服务器上的路径   
  15.         String path = "/path/";   
  16.         // 要上传本地文件路径   
  17.         String filename = "D:" + File.separator + "test.txt";   
  18.         // 上传服务器上文件名   
  19.         String ftpFile = "test.txt";   
  20.   
  21.         try {   
  22.                
  23.             ftpClient = new FtpClient(server);   
  24.             //ftpClient.openServer(server,21);   
  25.             ftpClient.login(user, password);   
  26.             System.out.println("Login .......");   
  27.                
  28.             // path是ftp服务下主目录的子目录   
  29.             if (path.length() != 0)   
  30.                 ftpClient.cd(path);   
  31.             // 用2进制上传   
  32.             ftpClient.binary();   
  33.   
  34.             TelnetOutputStream os = null;   
  35.             FileInputStream is = null;   
  36.   
  37.             os = ftpClient.put(ftpFile);   
  38.             File file_in = new File(filename);   
  39.             if (file_in.length() == 0) {   
  40.                 throw new Exception("上传文件为空!");   
  41.             }   
  42.             is = new FileInputStream(file_in);   
  43.             byte[] bytes = new byte[1024];   
  44.             int c;   
  45.             while ((c = is.read(bytes)) != -1) {   
  46.                 os.write(bytes, 0, c);   
  47.             }   
  48.   
  49.             System.out.println("上传文件成功!");   
  50.             is.close();   
  51.             os.close();   
  52.         } catch (FileNotFoundException e) {   
  53.             e.printStackTrace();   
  54.         } catch (IOException e) {   
  55.             e.printStackTrace();   
  56.         } catch (Exception e) {   
  57.             e.printStackTrace();   
  58.         }    
  59.   
  60.     }   
  61. }  
public class TestFtpClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		FtpClient ftpClient;
		// server:FTP服务器的IP地址
		String server = "127.0.0.1";
		// user:登录FTP服务器的用户名
		String user = "username";
		// password:登录FTP服务器的用户名的口令
		String password = "password";
		// path:FTP服务器上的路径
		String path = "/path/";
		// 要上传本地文件路径
		String filename = "D:" + File.separator + "test.txt";
		// 上传服务器上文件名
		String ftpFile = "test.txt";

		try {
			
			ftpClient = new FtpClient(server);
			//ftpClient.openServer(server,21);
			ftpClient.login(user, password);
			System.out.println("Login .......");
			
			// path是ftp服务下主目录的子目录
			if (path.length() != 0)
				ftpClient.cd(path);
			// 用2进制上传
			ftpClient.binary();

			TelnetOutputStream os = null;
			FileInputStream is = null;

			os = ftpClient.put(ftpFile);
			File file_in = new File(filename);
			if (file_in.length() == 0) {
				throw new Exception("上传文件为空!");
			}
			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("上传文件成功!");
			is.close();
			os.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} 

	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(一)、Sun FtpClient 的相关文章

  • 将字符串 ascii 转换为字符串 Hex

    假设我有这个字符串 string str 1234 我需要一个函数将该字符串转换为该字符串 0x31 0x32 0x33 0x34 我在网上搜索了很多类似的东西 但没有找到这个问题的答案 string str 1234 char charV
  • Java中如何替换第一次出现的字符串

    我想替换下面第一次出现的字符串 String test see Comments this is for some test help us 如果测试包含如下输入 则不应替换 请参阅评论 末尾有空格 看评论 看评论 我想得到如下输出 Out
  • 如何将欢迎页面设置为 struts 操作?

    我有一个基于 struts 的 web 应用程序 我希望默认的 欢迎 页面成为一个操作 我发现的唯一解决方案似乎是使欢迎页面成为包含操作重定向的 JSP 例如 在web xml
  • Mysql 使用搜索字符串排序

    我有一个 mysql 查询 例如 select from employee where name like ani 我希望我的结果以 ani 开头排序 例如 我的结果应该是 anil anirudha rani 首先以 ani 开头 然后是
  • 如何从数组C++中获取唯一的字符串

    我知道我的问题对某些人来说可能很愚蠢 但我整天用谷歌搜索并尝试制定自己的解决方案 但我失败了 请帮助 我需要从简单的字符串数组中打印所有唯一的字符串 example 输入 嗨 我的 名字 嗨 土豆 文本 名字 嗨 输出 我的 土豆 文本 我
  • String s="abc"+"xyz" 中将创建多少个String对象;在 Java 1.5 的早期版本中?

    按照这个link https stackoverflow com questions 6578133 how many java string objects will be created in the statement string
  • Java ByteBuffer 到 String

    这是将 ByteBuffer 转换为 String 的正确方法吗 String k abcd ByteBuffer b ByteBuffer wrap k getBytes String v new String b array if k
  • 在 C++ 中使用哪些字符串类?

    我们有一个用 C MFC 编写的多线程桌面应用程序 目前开发人员使用 CString 或 std string 可能取决于他们的心情 所以我们想选择一个实现 可能不是这两个 MFC 的 CString 基于写时复制 COW 习惯用法 有些人
  • 触发变量中 python 字符串的 f 字符串解析

    这个问题来自于处理jupyter magics 但可以用更简单的方式表达 给定一个字符串s the key is d key 和一本字典d key val 我们要解析该字符串 旧的方法是 format 这会引发错误 它不处理字典键 the
  • 是否可以从 io::stdin() 读取字符而不逐行缓存输入?

    这个问题指的是稳定的Rust版本1 2 0 您可以通过使用单个字节数组并继续读取直到Result成为一个Err 然而 这有一个问题 因为如果您不以 ASCII 字符阅读 就会出现这种情况 如果您要遇到这个问题 最好只分配一个String 并
  • toLocaleLowerCase() 和 toLowerCase() 之间的区别[重复]

    这个问题在这里已经有答案了 我试图fiddle http jsfiddle net xameeramir kr33b0aL with toLocaleLowerCase http www w3schools com jsref jsref
  • 有没有人有一段 PHP 代码来抓取字符串中的第一个“句子”?

    如果我有这样的描述 我们更喜欢可以回答的问题 而不仅仅是讨论 提供详细信息 写得清晰简单 我想要的只是 我们更喜欢可以回答的问题 而不仅仅是讨论 我想我会搜索一个正则表达式 比如 确定strpos 然后从主字符串中执行一个substr 但我
  • 为什么 Go 中无法将 [Size]byte 转换为字符串?

    我有一个大小字节数组 是我做完之后得到的md5 Sum data byte testing var pass string var b 16 byte b md5 Sum data pass string b 错误 cannot conve
  • For-Of 循环与 For 循环

    这两者是相同的还是可以互换的 在哪些用例中 人们会选择其中一种而不是另一种 for let i of array some code for let i 0 i lt array length i some code EXAMPLE 完成该
  • 当字符串和类都是引用类型时

    这是我上次面试的情况 问题 字符串存储在哪里 Answer 堆因为它是引用类型 问题 解释一下下面的代码 static void Main string args string one test string two one one one
  • Bash shell 中的“[ ]”与“[[ ]]”[重复]

    这个问题在这里已经有答案了 这可能已经得到回答 但我还是要问 我有两个版本的脚本 comp sh bin sh export tDay date Y m d newfile filename tDay filename filename 2
  • 调用 PHP 爆炸并访问第一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 用于取消引用函数结果的 PHP 语法 https stackoverflow com questions 742764 php syntax for dereferencing function re
  • PHP检查字符串是否包含多个单词

    我在互联网上查找了一些可以做到这一点的东西 但它只能用一个词来实现 我正在尝试构建一个脚本来检测我的网站的错误用户名 如果用户名包含数组中的任何单词 则将检测到错误的用户名 这是我编写的代码 但未能运行 bad words array yo
  • 为什么不能使用 String.Empty 作为默认参数值?

    今天我在构造函数中创建默认参数值 public SomeClass String something String Empty 编译器抱怨道 something 的默认参数值必须是编译时的 持续的 我的印象是 String 类上的 Empt
  • 在 Scala 中有效地重复字符/字符串 n 次

    我想更有效地执行以下操作 def repeatChar char Char n Int List fill n char mkString def repeatString char String n Int List fill n cha

随机推荐

  • Edraw Max教程】如何有趣的创建梦幻般的思维导图

    Edraw Max 亿图图示 是一款综合图形图表制作软件 它包含丰富的实例和模版 帮助您轻松创建流程图 网络拓扑图 组织结构图 商业图表 工程图 思维导图 软件设计图和平面布局图等 亿图采用更智能和人性化的绘制方式 最大程度帮助设计者降低工
  • 九度OJ 1193:矩阵转置 (矩阵计算)

    时间限制 1 秒 内存限制 32 兆 特殊判题 否 提交 1673 解决 1132 题目描述 输入一个N N的矩阵 将其转置后输出 要求 不得使用任何数组 就地逆置 输入 输入的第一行包括一个整数N 1 lt N lt 100 代表矩阵的维
  • react umi实战

    umi umiJs是一个类Next JS的react开发框架 它基于一个约定 即pages目录下的文件即路由 而文件则导出react组件 然后打通从源码到产物的每个阶段 并配以完善的插件体系 让我们能把umi的产物部署到各个场景里面 初始化
  • Unity发布时出现“The type or namespace name `UnityEditor' could not be found.

    现象 using UnityEditor 就算包含了头文件 也会报错 原因 在非编辑器脚本中加入编辑器脚本时 修改方法 1 在Asset中创建Editor文件夹 并将有对Editor操作的脚本全放入到该文件夹中 再次运行之前出错的函数 问题
  • java中的自定义对象排序

    对于数组排序我们知道有Arrays sort 方法 但是如果遇到想要对一个对象数组中的某个属性进行排序 我们该如何去做呢 以给学生成绩排序为例 首先创建一个存储学生对象的数组 package JAVA API public class So
  • 容器数据持久化

    一 挂载方式 Docker提供三种方式将数据从宿主机挂载到容器中 volumes Docker管理宿主机文件系统的一部分 var lib docker volumes 保存数据的最佳方式 bind mounts 将宿主机上的任意位置的文件或
  • Python爬虫-MongoDB

    Python爬虫 MongoDB 文章目录 Python爬虫 MongoDB 前言 与MySQL对比 启动 关闭MongoDB 操作 数据库操作 集合操作 数据操作 增 删 改 查 保存 运算符 高级操作 聚合 常用管道 常用表达式 安全性
  • QT5中 类成员变量的初始化

    不能 类的声明中 进行 QString usr id admin 这样的初始化 初始化要到在初始化参数列表中
  • [FAQ09104]进入应用界面后发现会闪屏,此时要如何定位是否是relaunch activity引起的闪屏呢

    DESCRIPTION 进入应用界面后发现会闪屏 此时要如何定位是否是relaunch activity引起的闪屏呢 SOLUTION 1 对于这类问题 抓取log时记得要打开AMS的log开关 adb shell dumpsys acti
  • 使用JDBC获取各数据库的Meta信息——表以及对应的列

    先贴代码 作为草稿 第一个是工具类 MapUtil java import java util ArrayList import java util HashMap import java util Iterator import java
  • 小程序运行在微信和企业微信

    获取当前运行环境 如果开发者的小程序需要同时运行在微信和企业微信端 那么对于开发者来说 第一件事情则是需要知道小程序当前的运行环境 开发者可以通过调用异步接口 wx getSystemInfo 或者同步接口 wx getSystemInfo
  • Python的pyautogui库(鼠标,键盘操作篇)

    图片操作篇可以观看https blog csdn net m0 61741706 article details 126898616 pyautogui库可以模仿人去点击输出和键盘 相比selenium库 pyautogui库更方便 更便捷
  • [35]html总结01

    lesson01 lesson02基础
  • 服务器名称为空不显示,服务器名称为空

    服务器名称为空 内容精选 换一换 对某一个保护组的停止保护操作 保护组status为protected或者error stopping才能停止保护 URI格式POST v1 project id server groups server g
  • matlab生成cos函数_从零开始的matlab学习笔记——(22)三维曲面绘制

    matlab应用 求极限 求导 求积分 解方程 函数绘图 三维图像 更多内容尽在个人专栏 matlab学习 上一节我们说了说三维曲线的绘制 这一节我们趁热打铁 说一说三维曲面 meshgrid函数 建造三维曲面之前 我们先来了解一下mesh
  • stm32编译错误 L6218E L6304W

    当写一个关于stm32输出正弦波的程序时 编译文件出现 OBJ Template axf Error L6218E Undefined symbol main referred from rxxxx 错误 是main函数未定义 出现 OBJ
  • 招银网络科技2024「金融科技未来星」海外校园招聘计划启动!

    亚控科技真有知乎上说的这么差吗 有拿到offer的可以交流下 京东初试 淘天集团是谁 同学 简历已发送请查收 拼多多面试 秋招趣事之汇川技术 好的不学净学坏 这份24届求职黑名单快收藏 不要再重蹈覆辙 社招校招都可以投 可私聊我看进度 终于
  • C++11 并发指南五(std::condition_variable 详解)

    C 11 并发指南五 std condition variable 详解 前面三讲 C 11 并发指南二 std thread 详解 C 11 并发指南三 std mutex 详解 分别介绍了 std thread std mutex st
  • C++多线程(并发、进程、线程的基本概念和综述)

    并发 进程 线程的基本概念和综述 并发 并发表示两个或者更多任务 独立的活动 同时发生 进行 例如 一面唱歌一面弹琴 一面走路一面说话 画画的时候听小说等 回归到计算机领域 所谓并发 就是一个程序同时执行多个独立的任务 以往计算机只有单核C
  • (一)、Sun FtpClient

    项目实践中遇到Ftp传输问题 在这里做个专辑 第一篇还是介绍一下sun提供的FtpClient 这个也是网上说的最多的 在这里我只是给出例程 不再做详细的解释 sun提供的FtpClient简单宜用 不支持任何加密方式 并没有提供相应的ap