`
lishumingwm163.com
  • 浏览: 338972 次
  • 性别: 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

    SMB是一种广泛使用的网络文件共享协议,尤其在Windows环境中,它允许不同设备在局域网(LAN)内共享文件、打印机和其他资源。jcifs.jar 和jcifs-1.3.15.jar 是这个库的不同版本,其中jcifs-1.3.15.jar 是特定的版本...

    jcifs-1.3.1附带示例.rar

    SMB是一种广泛使用的网络文件共享协议,最初由IBM开发,后来被Microsoft广泛采用并扩展为CIFS(Common Internet File System)。该协议允许在网络中的不同设备之间共享文件、打印机和其他资源。在Java环境中,如果...

    jcifs开发工具

    CIFS是Common Internet File System的缩写,它是Windows操作系统中广泛使用的网络文件共享协议,允许不同设备间共享文件和打印机。jcifs使得开发者能够在非Windows平台的Java应用中访问Windows网络资源,例如读取、...

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

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

    计算机软件-商业源码-275 获取网络中所有的工作组.zip

    1. 使用SMB(Server Message Block)协议:SMB是一种广泛用于文件共享和通信的协议,它是Windows网络的基础。通过SMB,我们可以发现网络上运行SMB服务的工作组和计算机。 2. 在C#中,可以利用`System.Net.Network...

    wmi4j 远程执行cmd命令获取命令执行的结果

    该代码实现了在远程windows主机上 获取进程列表 及进程对应的端口;使用wmi4j 连接远程主机获取进程列表,创建文件夹、共享文件夹、执行netstat -ano输出到aa.txt文件,读取文件、撤销文件夹共享、删除文件夹及aa....

    Jespa技术文档(中文版)

    不过,通过配置properties文件中的localhost.netbios.name属性,可以为每个Jespa实例分配不同的NetBIOS主机名,允许它们共享同一个计算机帐户。 综上所述,Jespa是一个强大且全面的安全组件,尤其适用于需要NTLMv2...

Global site tag (gtag.js) - Google Analytics