- 浏览: 337901 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
u013810758:
[flash=200,200][url][img][list] ...
poi 解析excel 03与07不兼容问题 -
u013810758:
我也是这么做的 但是还是有问题啊 感觉07版的或03版的内容 ...
poi 解析excel 03与07不兼容问题 -
sezi915:
我觉得如果用异常来判断Excel版本的话 用org.apach ...
poi 解析excel 03与07不兼容问题 -
他大姨妈:
思路很好,楼主脑子比较好使
poi 解析excel 03与07不兼容问题 -
zhenlong_qu:
谢谢博主的这篇文章,不得不说,博主的思路真不错,按照这个思路, ...
poi 解析excel 03与07不兼容问题
主要使用apache中的net包来实现。网址http://commons.apache.org/net/。具体包的下载和API文档请看官网。 断点上传就是在上传的过程中设置传输的起始位置。并设置二进制传输。 Java代码
1.package apache.net.test;
2.
3.import java.io.File;
4.import java.io.FileInputStream;
5.import java.io.FileOutputStream;
6.import java.io.IOException;
7.import java.io.InputStream;
8.import java.io.OutputStream;
9.import java.io.PrintWriter;
10.import org.apache.commons.net.PrintCommandListener;
11.import org.apache.commons.net.ftp.FTP;
12.import org.apache.commons.net.ftp.FTPClient;
13.import org.apache.commons.net.ftp.FTPFile;
14.import org.apache.commons.net.ftp.FTPReply;
15.
16.public class ContinueFTP {
17. private FTPClient ftpClient = new FTPClient();
18.
19. public ContinueFTP(){
20. //设置将过程中使用到的命令输出到控制台
21. this.ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
22. }
23.
24. /**
25. * 连接到FTP服务器
26. * @param hostname 主机名
27. * @param port 端口
28. * @param username 用户名
29. * @param password 密码
30. * @return 是否连接成功
31. * @throws IOException
32. */
33. public boolean connect(String hostname,int port,String username,String password) throws IOException{
34. ftpClient.connect(hostname, port);
35. if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){
36. if(ftpClient.login(username, password)){
37. return true;
38. }
39. }
40. disconnect();
41. return false;
42. }
43.
44. /**
45. * 从FTP服务器上下载文件
46. * @param remote 远程文件路径
47. * @param local 本地文件路径
48. * @return 是否成功
49. * @throws IOException
50. */
51. public boolean download(String remote,String local) throws IOException{
52. ftpClient.enterLocalPassiveMode();
53. ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
54. boolean result;
55. File f = new File(local);
56. FTPFile[] files = ftpClient.listFiles(remote);
57. if(files.length != 1){
58. System.out.println("远程文件不唯一");
59. return false;
60. }
61. long lRemoteSize = files[0].getSize();
62. if(f.exists()){
63. OutputStream out = new FileOutputStream(f,true);
64. System.out.println("本地文件大小为:"+f.length());
65. if(f.length() >= lRemoteSize){
66. System.out.println("本地文件大小大于远程文件大小,下载中止");
67. return false;
68. }
69. ftpClient.setRestartOffset(f.length());
70. result = ftpClient.retrieveFile(remote, out);
71. out.close();
72. }else {
73. OutputStream out = new FileOutputStream(f);
74. result = ftpClient.retrieveFile(remote, out);
75. out.close();
76. }
77. return result;
78. }
79.
80. /**
81. * 上传文件到FTP服务器,支持断点续传
82. * @param local 本地文件名称,绝对路径
83. * @param remote 远程文件路径,使用/home/directory1/subdirectory/file.ext 按照Linux上的路径指定方式,支持多级目录嵌套,支持递归创建不存在的目录结构
84. * @return 上传结果
85. * @throws IOException
86. */
87. public UploadStatus upload(String local,String remote) throws IOException{
88. //设置PassiveMode传输
89. ftpClient.enterLocalPassiveMode();
90. //设置以二进制流的方式传输
91. ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
92. UploadStatus result;
93. //对远程目录的处理
94. String remoteFileName = remote;
95. if(remote.contains("/")){
96. remoteFileName = remote.substring(remote.lastIndexOf("/")+1);
97. String directory = remote.substring(0,remote.lastIndexOf("/")+1);
98. if(!directory.equalsIgnoreCase("/")&&!ftpClient.changeWorkingDirectory(directory)){
99. //如果远程目录不存在,则递归创建远程服务器目录
100. int start=0;
101. int end = 0;
102. if(directory.startsWith("/")){
103. start = 1;
104. }else{
105. start = 0;
106. }
107. end = directory.indexOf("/",start);
108. while(true){
109. String subDirectory = remote.substring(start,end);
110. if(!ftpClient.changeWorkingDirectory(subDirectory)){
111. if(ftpClient.makeDirectory(subDirectory)){
112. ftpClient.changeWorkingDirectory(subDirectory);
113. }else {
114. System.out.println("创建目录失败");
115. return UploadStatus.Create_Directory_Fail;
116. }
117. }
118.
119. start = end + 1;
120. end = directory.indexOf("/",start);
121.
122. //检查所有目录是否创建完毕
123. if(end <= start){
124. break;
125. }
126. }
127. }
128. }
129.
130. //检查远程是否存在文件
131. FTPFile[] files = ftpClient.listFiles(remoteFileName);
132. if(files.length == 1){
133. long remoteSize = files[0].getSize();
134. File f = new File(local);
135. long localSize = f.length();
136. if(remoteSize==localSize){
137. return UploadStatus.File_Exits;
138. }else if(remoteSize > localSize){
139. return UploadStatus.Remote_Bigger_Local;
140. }
141.
142. //尝试移动文件内读取指针,实现断点续传
143. InputStream is = new FileInputStream(f);
144. if(is.skip(remoteSize)==remoteSize){
145. ftpClient.setRestartOffset(remoteSize);
146. if(ftpClient.storeFile(remote, is)){
147. return UploadStatus.Upload_From_Break_Success;
148. }
149. }
150.
151. //如果断点续传没有成功,则删除服务器上文件,重新上传
152. if(!ftpClient.deleteFile(remoteFileName)){
153. return UploadStatus.Delete_Remote_Faild;
154. }
155. is = new FileInputStream(f);
156. if(ftpClient.storeFile(remote, is)){
157. result = UploadStatus.Upload_New_File_Success;
158. }else{
159. result = UploadStatus.Upload_New_File_Failed;
160. }
161. is.close();
162. }else {
163. InputStream is = new FileInputStream(local);
164. if(ftpClient.storeFile(remoteFileName, is)){
165. result = UploadStatus.Upload_New_File_Success;
166. }else{
167. result = UploadStatus.Upload_New_File_Failed;
168. }
169. is.close();
170. }
171. return result;
172. }
173. /**
174. * 断开与远程服务器的连接
175. * @throws IOException
176. */
177. public void disconnect() throws IOException{
178. if(ftpClient.isConnected()){
179. ftpClient.disconnect();
180. }
181. }
182.
183. public static void main(String[] args) {
184. ContinueFTP myFtp = new ContinueFTP();
185. try {
186. myFtp.connect("192.168.21.171", 21, "test", "test");
187. System.out.println(myFtp.upload("E:\\VP6.flv", "/MIS/video/VP6.flv"));
188. myFtp.disconnect();
189. } catch (IOException e) {
190. System.out.println("连接FTP出错:"+e.getMessage());
191. }
192. }
193.}
1.package apache.net.test;
2.
3.import java.io.File;
4.import java.io.FileInputStream;
5.import java.io.FileOutputStream;
6.import java.io.IOException;
7.import java.io.InputStream;
8.import java.io.OutputStream;
9.import java.io.PrintWriter;
10.import org.apache.commons.net.PrintCommandListener;
11.import org.apache.commons.net.ftp.FTP;
12.import org.apache.commons.net.ftp.FTPClient;
13.import org.apache.commons.net.ftp.FTPFile;
14.import org.apache.commons.net.ftp.FTPReply;
15.
16.public class ContinueFTP {
17. private FTPClient ftpClient = new FTPClient();
18.
19. public ContinueFTP(){
20. //设置将过程中使用到的命令输出到控制台
21. this.ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
22. }
23.
24. /**
25. * 连接到FTP服务器
26. * @param hostname 主机名
27. * @param port 端口
28. * @param username 用户名
29. * @param password 密码
30. * @return 是否连接成功
31. * @throws IOException
32. */
33. public boolean connect(String hostname,int port,String username,String password) throws IOException{
34. ftpClient.connect(hostname, port);
35. if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){
36. if(ftpClient.login(username, password)){
37. return true;
38. }
39. }
40. disconnect();
41. return false;
42. }
43.
44. /**
45. * 从FTP服务器上下载文件
46. * @param remote 远程文件路径
47. * @param local 本地文件路径
48. * @return 是否成功
49. * @throws IOException
50. */
51. public boolean download(String remote,String local) throws IOException{
52. ftpClient.enterLocalPassiveMode();
53. ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
54. boolean result;
55. File f = new File(local);
56. FTPFile[] files = ftpClient.listFiles(remote);
57. if(files.length != 1){
58. System.out.println("远程文件不唯一");
59. return false;
60. }
61. long lRemoteSize = files[0].getSize();
62. if(f.exists()){
63. OutputStream out = new FileOutputStream(f,true);
64. System.out.println("本地文件大小为:"+f.length());
65. if(f.length() >= lRemoteSize){
66. System.out.println("本地文件大小大于远程文件大小,下载中止");
67. return false;
68. }
69. ftpClient.setRestartOffset(f.length());
70. result = ftpClient.retrieveFile(remote, out);
71. out.close();
72. }else {
73. OutputStream out = new FileOutputStream(f);
74. result = ftpClient.retrieveFile(remote, out);
75. out.close();
76. }
77. return result;
78. }
79.
80. /**
81. * 上传文件到FTP服务器,支持断点续传
82. * @param local 本地文件名称,绝对路径
83. * @param remote 远程文件路径,使用/home/directory1/subdirectory/file.ext 按照Linux上的路径指定方式,支持多级目录嵌套,支持递归创建不存在的目录结构
84. * @return 上传结果
85. * @throws IOException
86. */
87. public UploadStatus upload(String local,String remote) throws IOException{
88. //设置PassiveMode传输
89. ftpClient.enterLocalPassiveMode();
90. //设置以二进制流的方式传输
91. ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
92. UploadStatus result;
93. //对远程目录的处理
94. String remoteFileName = remote;
95. if(remote.contains("/")){
96. remoteFileName = remote.substring(remote.lastIndexOf("/")+1);
97. String directory = remote.substring(0,remote.lastIndexOf("/")+1);
98. if(!directory.equalsIgnoreCase("/")&&!ftpClient.changeWorkingDirectory(directory)){
99. //如果远程目录不存在,则递归创建远程服务器目录
100. int start=0;
101. int end = 0;
102. if(directory.startsWith("/")){
103. start = 1;
104. }else{
105. start = 0;
106. }
107. end = directory.indexOf("/",start);
108. while(true){
109. String subDirectory = remote.substring(start,end);
110. if(!ftpClient.changeWorkingDirectory(subDirectory)){
111. if(ftpClient.makeDirectory(subDirectory)){
112. ftpClient.changeWorkingDirectory(subDirectory);
113. }else {
114. System.out.println("创建目录失败");
115. return UploadStatus.Create_Directory_Fail;
116. }
117. }
118.
119. start = end + 1;
120. end = directory.indexOf("/",start);
121.
122. //检查所有目录是否创建完毕
123. if(end <= start){
124. break;
125. }
126. }
127. }
128. }
129.
130. //检查远程是否存在文件
131. FTPFile[] files = ftpClient.listFiles(remoteFileName);
132. if(files.length == 1){
133. long remoteSize = files[0].getSize();
134. File f = new File(local);
135. long localSize = f.length();
136. if(remoteSize==localSize){
137. return UploadStatus.File_Exits;
138. }else if(remoteSize > localSize){
139. return UploadStatus.Remote_Bigger_Local;
140. }
141.
142. //尝试移动文件内读取指针,实现断点续传
143. InputStream is = new FileInputStream(f);
144. if(is.skip(remoteSize)==remoteSize){
145. ftpClient.setRestartOffset(remoteSize);
146. if(ftpClient.storeFile(remote, is)){
147. return UploadStatus.Upload_From_Break_Success;
148. }
149. }
150.
151. //如果断点续传没有成功,则删除服务器上文件,重新上传
152. if(!ftpClient.deleteFile(remoteFileName)){
153. return UploadStatus.Delete_Remote_Faild;
154. }
155. is = new FileInputStream(f);
156. if(ftpClient.storeFile(remote, is)){
157. result = UploadStatus.Upload_New_File_Success;
158. }else{
159. result = UploadStatus.Upload_New_File_Failed;
160. }
161. is.close();
162. }else {
163. InputStream is = new FileInputStream(local);
164. if(ftpClient.storeFile(remoteFileName, is)){
165. result = UploadStatus.Upload_New_File_Success;
166. }else{
167. result = UploadStatus.Upload_New_File_Failed;
168. }
169. is.close();
170. }
171. return result;
172. }
173. /**
174. * 断开与远程服务器的连接
175. * @throws IOException
176. */
177. public void disconnect() throws IOException{
178. if(ftpClient.isConnected()){
179. ftpClient.disconnect();
180. }
181. }
182.
183. public static void main(String[] args) {
184. ContinueFTP myFtp = new ContinueFTP();
185. try {
186. myFtp.connect("192.168.21.171", 21, "test", "test");
187. System.out.println(myFtp.upload("E:\\VP6.flv", "/MIS/video/VP6.flv"));
188. myFtp.disconnect();
189. } catch (IOException e) {
190. System.out.println("连接FTP出错:"+e.getMessage());
191. }
192. }
193.}
发表评论
-
http断点续传
2014-07-24 13:31 951Http文件下载的普通模式就不多说了,断点下载与普通模式不一 ... -
修改Tomcat的运行内存 & JSP中查看当前的内存使用状况
2014-03-24 16:00 1037一、设置JVM内存设置 1. 设置JVM内存的参数有 ... -
Eclipse编码格式修改
2014-03-21 09:13 805如果要使插件开发应 ... -
标题叠加在图片上面的几种显示方式
2014-02-24 10:55 1506很多新改版的网站都会在图片显示上下一些文章,比如加 ... -
java druid淘宝数据库连接池数据库监听
2013-12-26 15:40 13513java程序很大一部分 要操作数据库,为了提高性能操作数据库 ... -
memcached- tomcat配置详解
2013-12-04 18:08 1437msmconfigurationmemcached-se ... -
Oracle中将小数转换成字符丢零.截取小数.除数为零解决法
2013-11-26 14:33 83301.小数转换成字符往往会丢失前面的零.解决方法_例:to_c ... -
java 垃圾回收配置
2013-10-22 14:16 4496一、JVM内存模型及垃 ... -
nginx配置详解
2013-10-18 14:45 1086user nginx ; #用户 ... -
oracle 列转行
2013-10-11 21:15 16310业务中做报表,需要将一列列数据汇总成一行,然后汇总,如下: ... -
osgi 注册servlet 和资源
2013-10-08 10:02 1698在Activator类中 public void s ... -
正则表达式 匹配url
2013-07-09 14:27 1587正则表达式 (http|ftp|https):\ ... -
ZooKeeper 集群配置
2013-07-05 14:40 1199ZooKeeper 是一个分布式开源框架,提供了协调 ... -
jdk logger 配置实用宝典
2013-06-18 15:45 1860日志输出是所有系统必备的,很多开发人员可能因为常常使用log ... -
CSS实现兼容性的渐变背景(gradient)效果
2013-06-05 14:32 1042CSS实现兼容性的渐变背 ... -
jinterop获取windows事件
2013-05-27 13:42 1874Java代码 package com ... -
jcifs windows主机之间进行网络文件共享
2013-05-20 18:05 1222CIFS (Common Internet File ... -
java调用windows的wmi
2013-05-20 14:34 2074100%纯java调用windows的wmi获取监控数据 ... -
java调用windows的wmi
2013-05-20 14:32 4120100%纯java调用windows的wmi获取监控数据 ... -
tomcat 域名
2013-03-14 14:44 19311. 下载安装版本的Tomcat(或者压缩版的,只不过要自己配 ...
相关推荐
Java断点续传技术在实际应用中广泛用于文件上传和下载工具,如迅雷、FTP客户端等,它有效地解决了大文件传输过程中的网络问题,提高了用户体验。了解并掌握这种技术对于开发高效的网络应用至关重要。
Java 断点续传技术是网络传输中常用的一种机制,特别是在大文件下载或上传时,如果因为网络中断或其他原因导致传输失败,可以借助断点续传功能从上次中断的地方继续,而无需重新开始。在Java中实现断点续传,通常...
Java 断点续传技术是网络传输中一种高效的数据...通过以上分析,我们可以看出Java断点续传涉及到了网络编程、文件操作、状态管理和错误处理等多个方面的知识,它在实际应用中能有效提高大文件传输的效率和用户体验。
Java 断点续传技术是Java编程中一种重要的文件传输策略,主要用于大文件的上传和下载,能够提高网络效率并优化用户体验。在处理大文件时,由于网络不稳定、用户操作中断或其他因素,可能会导致文件传输失败。断点续...
总之,Java断点续传技术是提高大文件下载效率的重要手段,通过HTTP的Range请求实现与服务器的交互,确保用户可以在任何时间点继续未完成的下载任务。在实际开发中,我们需要注意处理各种异常情况,以提供稳定可靠的...
综上所述,Java断点续传技术涉及网络编程、文件操作和异常处理等多个方面,通过合理的实现可以显著提高大文件下载的效率和用户体验。理解并掌握这些知识点对于开发高效的文件下载应用至关重要。
Java 断点续传的原理主要涉及到网络编程、文件处理以及多线程技术。断点续传是指在上传或下载大文件时,如果因为网络中断或其他原因导致传输不完整,可以从上次中断的地方继续传输,而不需要从头开始,极大地提高了...
Java 断点续传上传是一种在文件传输过程中,如果因为网络中断或其他原因导致传输不完整,可以从上次中断的位置继续上传的技术。这种技术尤其在大文件传输时非常有用,避免了因网络问题而需要重新上传整个文件的困扰...
总之,Java断点续传技术结合进度条插件,为大文件上传提供了高效和用户友好的解决方案。通过合理利用如`HttpUploader5Utf8MySQL`这样的工具,开发者可以轻松实现这一功能,并结合MySQL数据库进行状态管理,提升系统...
Java 断点续传是一种在下载大文件时...通过以上这些知识点,您可以构建一个功能完备的Java断点续传下载器。实际开发时,还需要考虑其他因素,如网络状况的动态适应、下载策略优化等,以提供更高效和稳定的下载体验。
Java实现断点续传是一项在文件传输中非常实用的技术,特别是在大文件传输或者网络不稳定的情况下。断点续传允许用户在文件传输中断后从上次中断的位置继续,而不是重新开始整个传输过程,极大地提高了效率和用户体验...
Java 断点续传与多线程下载是网络编程中两个重要的技术,它们在处理大文件下载时尤其有用。断点续传允许用户在下载中断后从上次停止的地方继续,而多线程下载则通过同时从服务器获取多个数据块来提高下载速度。接...
本项目是一个基于Vue和Java的断点续传与大文件上传系统设计源码,共包含563个文件,其中包括258个Java文件、82个SVG文件等。系统采用了Vue-uploader和若依框架,为用户提供了一个便捷的文件上传解决方案。系统支持多...
该资源为java断点续传的代码,非常有用!