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

    它允许不同计算机之间通过网络共享文件和打印机。jcifs库则是用Java实现的CIFS客户端库,兼容多种操作系统,包括Linux、Mac OS X和Windows。 **jcifs-1.3.14.jar的核心功能** 1. **文件和目录操作**:jcifs库允许...

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

    在实际应用中,jcifs-1.3.3.jar广泛应用于需要在不同系统之间共享文件的场景,如文件服务器备份、分布式文件系统、协作工具等。开发者需要理解SMB协议的基本概念,熟悉jcifs提供的API,并能正确处理可能出现的身份...

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

    这个库允许Java程序访问局域网内的共享文件,无论是进行上传还是下载。下面将详细介绍如何利用jcifs-1.3.15.jar实现共享文件的上传和下载功能。 首先,我们需要了解jcifs的基本用法。jcifs库提供了SmbFile类,该类...

    超详细!java访问windows共享目录并下载文件

    在Java编程环境中,有时我们需要与Windows操作系统进行交互,例如访问共享目录并下载其中的文件。这个过程涉及到几个关键的技术点,包括系统调用、网络通信和文件操作。在这个场景下,我们将通过`SmbUtils.java`和`...

    jcifs实现集成登录

    "jcifs"(Java CIFS Client)是一个开源的Java库,它实现了通用因特网文件系统(CIFS)协议,允许Java应用程序与Windows网络共享进行交互。CIFS是一种广泛用于文件共享和打印服务的协议,它基于更早的SMB(Server ...

    jcifs API开发文档、jar包等

    jcifs (Java CIFS Client Library) 是一个开源的 Java 库,它实现了客户端接口文件系统(Client Interface File System, CIFS),也称为 SMB 协议,允许 Java 应用程序访问网络共享资源,如 Windows 文件服务器或 ...

    android 播放局域网共享多媒体文件

    在本例中,SMB协议是常见的用于访问局域网共享文件的标准协议。你可以使用开源库如jcifs-ng或smb4j来实现对SMB协议的支持。这些库允许Android应用连接到Windows文件服务器或NAS设备,读取共享目录中的多媒体文件。 ...

    Java对Samba进行上传与下载文件-jcifs

    Samba是一个开源软件,允许Linux/Unix系统与Windows系统之间进行文件共享,而jcifs是Java的一个库,它提供了对SMB(Server Message Block)协议的支持,使得Java程序能够无缝地操作Samba网络共享资源。 首先,我们...

    jcifs-1.3.17.jar

    总之,`jcifs-1.3.17.jar`为Java开发者提供了一个强大的工具,用于在Java应用程序中集成SMB/CIFS文件操作,从而实现与Windows网络共享的无缝交互。正确使用这个库可以极大地扩展Java应用程序的功能,特别是在跨平台...

    java共享文件(windows).rar

    `java.net.SMBClient`是Java SMB(Server Message Block)客户端,它可以与Windows共享文件系统进行交互。然而,Java标准库并未直接支持SMB协议,需要依赖第三方库,如jcifs(Java CIFS Client)或jcifs-ng,它们...

    jcifs-1.3.15.jar

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

    java 操作windows 共享目录方法介绍

    ### Java操作Windows共享目录的方法介绍 #### 一、SMB协议概述 SMB(Server Message Block)协议,也称为CIFS...通过对这些内容的学习,开发者可以更好地掌握如何利用Java语言进行网络文件共享操作的技术要点。

    Android smb访问共享文件以及播放共享文件

    SMB协议允许设备通过网络共享文件、打印机以及其他资源,广泛应用于Windows、Linux和Unix系统中。在Android系统中,虽然原生支持不强,但通过第三方库和应用,我们可以实现SMB访问功能。 1. **SMB协议简介** - SMB...

    jcifs跨服务器操作共享文件夹.tgz

    SMB是一种广泛用于Windows网络中的文件共享协议,但jcifs使得在Java应用程序中也能方便地实现这一功能,打破了操作系统之间的界限。 描述中提到"jar包与项目包",这表明jcifs_1.3.1.jar可能是jcifs库的特定版本,...

    jcifs-1.3.1附带示例.rar

    该协议允许在网络中的不同设备之间共享文件、打印机和其他资源。在Java环境中,如果没有jcifs这样的库,我们通常无法直接处理SMB协议,因为Java的标准库并不支持SMB。 jcifs-1.3.1.jar是jcifs项目的版本1.3.1,这是...

    jcifs-1.3.13.jar

    该库使得Java应用程序能够方便地读取、写入以及管理远程网络上的共享文件。 在详细讲解jcifs-1.3.13.jar之前,我们需要了解SMB协议。SMB是CIFS(Common Internet File System)的前身,是局域网中文件和打印机共享...

    jcifs开发工具

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

    Jcifs创建远程文件夹的例子

    CIFS(Common Internet File System)是一种广泛使用的文件共享协议,尤其在Windows环境中。jcifs是一个开源的Java库,它允许Java应用程序通过CIFS协议与远程文件系统进行交互,比如创建、读取、写入和删除文件或...

    jcifs-1.3.16.jar及源码

    总的来说,jcifs-1.3.16.jar是Java开发者在处理SMB协议时的重要工具,尤其对于需要在不同操作系统之间共享文件的应用,如企业内部的文件服务器、协同办公系统等,jcifs库提供了强大的支持。通过研究源码、查阅doc...

    jcifs 1.37源码

    由于Android原生不支持SMB,jcifs使得Android应用能够访问Windows网络共享,这对于企业级应用或需要访问NAS设备的个人项目尤其有用。 在jcifs 1.37版本的源码中,我们可以深入研究其内部实现,包括对SMB协议的解析...

Global site tag (gtag.js) - Google Analytics