注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

基于SMB/JCIFS协议的共享文件上传和下载(局域网中共享文件获取文件)  

2012-12-11 17:55:14|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。后来微软对这个发展进行了重大更改,这个更改后的版本也是最常见的版本。微软将SMB协议与它和3Com一起发展的网络管理程序结合在一起,并在Windows for Workgroups和后来的Windows版本中不断加入新的功能。
CIFS (Common Internet File System) 通用Internet文件系统

  在windows主机之间进行网络文件共享是通过使用微软公司自己的CIFS服务实现的。 

  CIFS 是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机的服务。CIFS 使用客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使用。SMB协议(见最后的名词解释)现在是局域网上用于服务器文件访问和打印的协议。象SMB协议一样,CIFS在高层运行,而不象TCP/IP协议那样运行在底层。CIFS可以看做是应用程序协议如文件传输协议和超文本传输协议的一个实现。

  CIFS 可以使您达到以下功能: 

  1.访问服务器本地文件并读写这些文件 

  2.与其它用户一起共享一些文件块 

  3.在断线时自动恢复与网络的连接 

  4.使用西欧字符文件名 

  一般来说,CIFS使用户得到比FTP更好的对文件的控制。它提供潜在的更直接地服务器程序接口,这比使用HTTP协议的浏览器更好。CIFS最典型的应用是windows用户能够从“网上邻居”中找到网络中的其他主机并访问其中的共享文件夹.

  CIFS 是开放的标准而且已经被作为Internet应用程序标准被提交到IETF。

JCIFS是CIFS 在JAVA中的一个实现,是samba组织负责维护开发的一个开源项目,专注于使用java语言对cifs协议的设计和实现。他们将jcifs设计成为一个完整的,丰富的,具有可扩展能力且线程安全的客户端库。这一库可以应用于各种java虚拟机访问遵循CIFS/SMB网络传输协议的网络资源。类似于java.io.File的接口形式,在多线程的工作方式下被证明是有效而容易使用的

Java代码 
  1. package com.smb;  
  2.   
  3. import java.io.BufferedInputStream;  
  4. import java.io.BufferedOutputStream;  
  5. import java.io.File;  
  6. import java.io.FileInputStream;  
  7. import java.io.FileOutputStream;  
  8. import java.io.IOException;  
  9. import java.io.InputStream;  
  10. import java.io.OutputStream;  
  11.   
  12. import jcifs.smb.SmbFile;  
  13. import jcifs.smb.SmbFileInputStream;  
  14. import jcifs.smb.SmbFileOutputStream;  
  15.   
  16. public class Smbtest {  
  17.     /** 
  18.      * 从局域网中共享文件中得到文件并保存在本地磁盘上 
  19.      * @param remoteUrl 共享电脑路径 如:smb//administrator:123456@172.16.10.136/smb/1221.zip  , smb为共享文件 
  20.      * 注:如果一直出现连接不上,有提示报错,并且错误信息是 用户名活密码错误 则修改共享机器的文件夹选项 查看 去掉共享简单文件夹的对勾即可。 
  21.      * @param localDir 本地路径 如:D:/ 
  22.      */  
  23.     public static void smbGet(String remoteUrl,String localDir){  
  24.         InputStream in = null;  
  25.         OutputStream out = null;  
  26.         try {  
  27.             SmbFile smbFile = new SmbFile(remoteUrl);  
  28.             String fileName = smbFile.getName();  
  29.             File localFile = new File(localDir+File.separator+fileName);  
  30.             in = new BufferedInputStream(new SmbFileInputStream(smbFile));  
  31.             out = new BufferedOutputStream(new FileOutputStream(localFile));  
  32.             byte []buffer = new byte[1024];  
  33.             while((in.read(buffer)) != -1){  
  34.                 out.write(buffer);  
  35.                 buffer = new byte[1024];  
  36.             }  
  37.         } catch (Exception e) {  
  38.             e.printStackTrace();  
  39.         }finally{  
  40.             try {  
  41.                 out.close();  
  42.                 in.close();  
  43.             } catch (IOException e) {  
  44.                 e.printStackTrace();  
  45.             }  
  46.         }  
  47.     }  
  48.     /** 
  49.      * 把本地磁盘中的文件上传到局域网共享文件下 
  50.      * @param remoteUrl 共享电脑路径 如:smb//administrator:123456@172.16.10.136/smb 
  51.      * @param localFilePath 本地路径 如:D:/ 
  52.      */  
  53.     public static void smbPut(String remoteUrl,String localFilePath){  
  54.         InputStream in = null;  
  55.         OutputStream out = null;  
  56.         try {  
  57.             File localFile = new File(localFilePath);  
  58.             String fileName = localFile.getName();  
  59.             SmbFile remoteFile = new SmbFile(remoteUrl+"/"+fileName);  
  60.             in = new BufferedInputStream(new FileInputStream(localFile));  
  61.             out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));  
  62.             byte []buffer = new byte[1024];  
  63.             while((in.read(buffer)) != -1){  
  64.                 out.write(buffer);  
  65.                 buffer = new byte[1024];  
  66.             }  
  67.         } catch (Exception e) {  
  68.             e.printStackTrace();  
  69.         }finally{  
  70.             try {  
  71.                 out.close();  
  72.                 in.close();  
  73.             } catch (IOException e) {  
  74.                 e.printStackTrace();  
  75.             }  
  76.         }  
  77.     }  
  78.       
  79.     public static void main(String[] args) {  
  80.         smbPut("smb://administrator:123456@172.16.10.136/smb""E:/1221.zip");  
  81.         smbGet("smb://administrator:123456@172.16.10.136/smb/1221.zip""D:/");  
  82.   
  83.     }  
  84.   
  85. }  
  评论这张
 
阅读(1051)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016