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

jcifs windows主机之间进行网络文件共享

    博客分类:
  • java
 
阅读更多

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的接口形式,在多线程的工作方式下被证明是有效而容易使用的。

   JCIFS的开发方法类似java的文件操作功能,它的资源url定位:smb://{user}:{password}@{host} /{path},smb为协议名,user和password分别为共享文件机子的登陆名和密码,@后面是要访问的资源的主机名或IP地址。最后是资源的 共享文件夹名称和共享资源名。例如 smb://administrator:122122@192.168.0.22/test/response.txt。

  在 JAVA程序中,使用如下方式获得一个远程共享文件的句柄:SmbFile file = new SmbFile("smb://guest:1234@192.168.3.56/share/a.txt");这里的句柄不仅限于远程的共享文件,还可 能是共享文件夹。isFile()方法和isDirectory()用来判断这个句柄对应的资源的真实属性。如果是共享文件夹,通过调用它的list() 方法将获得其中资源的列表。List方法支持过滤器机制,有两种过滤器可供使用,一种是SmbFileFilter,另一种是 SmbFilenameFilter,这两个在jcifs中作为接口出现,你可以根据自己的需要派生出个性化的过滤器,实现接口中的accept方法,以 满足不同业务的需求。

  SmbFileInputStream是smb文件的输入流,它的功能是以流的方式打开一个 SmbFile:SmbFileInputStream in = new SmbFileInputStream(file);SmbFileInputStream提供read方法,你可以从这个流中读出远程文件全部的内容。

  jcifs可从http://jcifs.samba.org/下载,下面是一个简单的例子:

  

写道
import jcifs.smb.SmbFileInputStream;

  import jcifs.smb.SmbFile;

  public class ReadShareFile {

  public static void main(String[] args) {

  try{

  SmbFile smbFile=new SmbFile("smb://test:test@10.218.100.12/share2/aa.txt");

  //通过 smbFile.isDirectory();isFile()可以判断smbFile是文件还是文件夹

  int length=smbFile.getContentLength();//得到文件的大小

  byte buffer[] = new byte[length] ;

  SmbFileInputStream in = new SmbFileInputStream(smbFile) ; //建立smb文件输入流

  while((in.read(buffer)) != -1){

  System.out.write(buffer);

  System.out.println(buffer.length);

  }

  in.close();

  }catch(Exception e){

  e.printStackTrace();

  }

  }


  }

 写文件:

 

      
 public static void writeFile(){
           InputStream in=null;
           OutputStream out=null;
           try {
                in=new  FileInputStream("F:/xuexi/Java/jenkins/jenkinsweb/WEB-INF/slave.jar");
             out=new SmbFile("smb://username:password@ip/d$/jenkins/32slave.jar").getOutputStream();
               byte[] buf = new byte[8192];
                                int len=0;
               while ((len = in.read(buf)) > 0)
               {
                   out.write(buf, 0, len);
               }
           } catch (Exception e) {
               e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
           }    finally {
               if(out!=null){
                   try {
                       out.close();
                   } catch (IOException e) {
                       e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                   }
               }
               if(in!=null){
                   try {
                       in.close();
                   } catch (IOException e) {
                       e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
                   }
               }
           }
       }

 

名词解释:

SMB(Server Message Block):通信协议是微软 (Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。SMB 是在会话层(session layer)和表示层(presentation layer)以及小部分应用层(application layer)的协议。SMB使用了NetBIOS的应用程序接口 (Application Program Interface,简称API)。另外,它是一个开放性的协议,允许了协议扩展——使得它变得更大而且复杂;大约有65个最上层的作业,而每个作业都超 过120个函数,甚至Windows NT也没有全部支持到,最近微软又把 SMB 改名为 CIFS(Common Internet  ile System),并且加入了许多新的特色。

分享到:
评论

相关推荐

    利用jcifs-1.3.15.jar实现共享文件上传下载

    利用jcifs-1.3.15.jar实现局域网内共享文件的下载上传demo,主要为新手提供样例,资深专家请略过,传输大文件比如百兆可能中间出现问题。

    共享文件传输-Jcifs

    jcifs-1.3.14.jar应用实例

    jcifs实现集成登录

    jcifs能很好的实现集成登录,在企业中能够实现登录一次就可以访问多个系统

    jcifs-1.3.12.zip

    通过jcifs实现java访问网络共享文件 jcifs 是 cifs(common internet file system) java的实现 smb (service message block) to be cifs jcifs 是一个开源项目 可从http://jcifs.samba.org/下载 SmbFileInputStream...

    jcifs-1.3.17.jar

    jcifs.jar,jar包文件,直接读写共享文件库资源

    jcifs-1.1.11.jar

    JCIFS是一个开源实现100%的Java的CIFS / SMB网络协议的客户端库。CIFS是Microsoft Windows平台(如映射网络驱动器)上的标准的文件共享. 实现网络上 文件共享 工具文件。比ftp操作更方便。

    java共享文件下载依赖包jcifs-1.3.3.jar

    java共享文件下载依赖包jcifs-1.3.3.jar

    jcifs-1.3.14.jar

    用于java操作网络邻居的共享目录的jar文件所需的(jcifs-1.3.14.jar )jar包 操作包括 上传文件 下载文件 创建文件夹 等

    jcifs-1.3.17-sources.jar

    用于java操作网络邻居的共享目录的jar文件所需的(jcifs-1.3.14.jar )jar包操作包括 上传文件 下载文件 创建文件夹 等。jcifs-1.3.14.jar 的源码

    jcifs-1.3.19.jar

    jcifs-1.3.19.jar 包,用于SMB协议 ,以实现远程读取文件。jcifs-1.3.19.jar 包,用于SMB协议 ,以实现远程读取文件。

    Jcifs创建远程文件夹的例子

    这是使用jcifs在远程机器创建文件夹的例子,请参考。。

    jcifs-1.3.13.jar

    网络访问文件用的jar。jcifs-1.3.13.jar

    ReadSambaFile:使用 jcifs java 库从 Samba 读取文件

    读取Samba文件使用 jcifs java 库从 Samba 读取文件。

    jcifs-1.3.1.jar

    实现共享文件读取和写入

    jcifs-1.3.15.jar

    通过jcifs.jar 创建远程文件和文件夹, 注意jcifs-1.3.15.jar 需要 远程计算机在局域网内,并且开启共享磁盘权限 。 一般用来连接域控,解析DNS,验证用户名密码。

    smb协议访问带用户名密码的共享文件夹

    它紧密地遵循CIFS规范(是Microsoft Windows平台标准文件共享协议),支持Unicode,命令管道,批处理,线程化调用者的IO复用,加密认证,完整事务,域/工作组/主机/共享/文件枚举,NetBIOS 套接字和名称服务,smb://...

    jcifs-1.3.14.1.jar

    jcifs-1.3.14.1 架包,用於遠程上傳文件到共享文件夾所要用到

Global site tag (gtag.js) - Google Analytics