`
hcx_2008
  • 浏览: 122156 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

用JAVA访问共享文件系统

阅读更多
在Microsoft 网 络 系 统 中,SMB(Server Message Block, 服 务 信 息 块) 协 议 是Windows for Workgroup(WfWg)、Windows 95、Windows NT 和LanManager 用 来 实 现 共 享 局 域 网 上 文 件 和 打 印 机 的 协 议。 对 于 利 用Linux 和Windows NT 构 建 的 局 域 网 来 说,Samba 就 是 为Linux 提 供 的SMB 客 户 程 序/ 服 务 器 程 序 的 软 件 包, 其 功 能 是 实 现Windows 和Linux 互 相 共 享 对 方 的 磁 盘 空 间 和 打 印 机。通用网络文件系统简称CIFS,它事实上是windows平台文件共享的标准协议,它是windows explorer,网络邻居和映射网络驱动器的底层实现协议。JAVA具有天然的平台无关性,使用JAVA可以访问任何类型的服务器或客户机上的共享文件系统,并且编写的软件产品可以运行于任何平台,因此用JAVA访问共享文件系统在企业应用中具有得天独厚的优势。

JAVA中的CIFS实现

Jcifs是CIFS在JAVA中的一个实现,是samba组织本着linux的精神,负责维护开发的一个开源项目。这个项目专注于使用java语言对cifs协议的设计和实现。他们将jcifs设计成为一个完整的,丰富的,具有可扩展能力且线程安全的客户端库。这一库可以应用于各种java虚拟机访问遵循CIFS/SMB网络传输协议的网络资源。类似于java.io.File的接口形式,在多线程的工作方式下被证明是有效而容易使用的。目前jcifs的最新版本是jcifs-0.8.0b,你可以在本文最后列出的参考资料中获得下载这一类库的网址,这一版本还支持分布式的文件系统,本文尚不涉及这一内容。

JAVA/CIFS程序设计

如果你曾经使用过java的文件操作功能,那么你将很容易掌握jcifs的开发方法。Jcifs通过类似如下的资源url定位一个资源:

smb://guest:1234@192.168.3.56/share/a.txt

这个url的开始部分smb:// 说明了这是一个smb类型的url;接下来的guest和1234分别是访问共享资源的用户名称和密码;@后面是要访问的资源的主机名或IP地址。最后是资源的共享文件夹名称和共享资源名。

在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方法,你可以从这个流中读出远程文件全部的内容。

至此,你已经掌握了java访问smb文件系统的基本方法。

SmbFileOutputStream是smb文件的输入流,可以向远程文件系统通过smb写入数据,方法与上面类似,不再赘述。

本文后面附带的源代码是一个完整的例子,它完成功能很简单,就是将另一台电脑上指定共享文件夹下的某些文件拷贝到本机的指定目录下。通过这个例子,相信你很容易将它移植到你的开发产品中。

第一步,设置运行环境。将源代码解压缩,将lib目录下的名称为jcifs-0.8.0b.jar的文件加入到你的操作系统的classpath中,使示例程序运行时能够找到这个库。

第二步,在另一台计算机上建立名称为share的共享文件夹,用户名为guest,密码也为guest。假设这台计算机的ip地址是192.168.0.2。

第三步,在刚才建立的共享文件夹下放置两个文件,名称分别为hello.txt,bye.txt。文件的内容无所谓。

第三步,在本地计算机上的C盘跟目录下建立一个名称为tmp的空目录,置此目录可写。

第四步,编译运行Sample1.java,并运行:

Java Sample1 192.168.3.52 guest guest /share/ c:/tmp/

检查c:\tmp文件夹,会发现hello.txt这个文件被复制到了本机,而bye.txt没有被复制,因为Sample1.java中使用了过滤器,仅允许名称为hello开头的文件被拷贝。

后记

对共享文件系统的访问是内部办公系统等涉及到文件迁移的软件产品开发过程中不可回避的课题,jCifs是一套针对这一课题完整而强大的解决方案,通过它你可以实现对任何共享文件系统的访问。

一些有用的资源和参考资料

本文的全部源代码,可编译运行,供读者研究,下载源代码。

如欲了解更多关于jcifs的信息,请访问其官方网站 http://jcifs.samba.org/。

您可以在 http://users.erols.com/mballen/jcifs/ 获得jcifs库的最新版本。

如果你对smb还不是十分熟悉,这里有一篇不错的文章将向你介绍什么是smb:http://samba.anu.edu.au/cifs/docs/what-is-smb.html。

关于作者

薛谷雨是NORDSAN(北京)信息科技开发有限公司高级JAVA研发工程师,正致力于企业级异构数据交换的服务器产品的研发,在J2EE和WEB SERVICE方面有较为丰富的开发经验,你可以通过 rainight@126.com 与他取得联系
分享到:
评论

相关推荐

    java访问共享文件

    标题“Java访问共享文件”指的是使用Java编程语言来操作网络上的共享文件系统,这通常涉及到Windows的SMB(Server Message Block)协议或者更现代的CIFS(Common Internet File System)协议。这篇博客文章可能详细...

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

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

    java操作共享文件

    在Java编程环境中,处理共享文件是一项常见的任务,特别是在企业级应用中,可能需要访问网络上的文件系统资源。Java提供了一些库来实现这一功能,其中之一就是jcifs库,它是一个开源的Java SMB(Server Message ...

    java读取局域网共享机器文件

    共享文件即是在局域网内的某台机器上设定一个共享目录,其他机器可以通过网络路径访问这些文件。 要实现Java读取局域网共享文件,主要涉及以下步骤和知识点: 1. **网络路径表示**:Java中,网络路径通常以UNC...

    java共享文件(windows).rar

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

    java读取win共享文件夹

    - 使用`java.net.Socket`类建立与Windows共享文件服务器的TCP连接。共享文件夹通常是基于SMB(Server Message Block)协议的,Java没有直接支持SMB的类,但可以通过第三方库如jcifs(Java SMB Client)来实现。 - ...

    JAVA P2P文件共享系统

    Java P2P(对等网络)文件共享系统是一种基于Java技术构建的分布式文件共享平台,它允许网络中的多个节点(用户)互相分享和获取文件,而无需中心服务器的介入。这种系统的核心理念在于,每个参与者既是服务的消费者...

    cms-java文件管理系统

    8. **集成其他系统**:通过API接口,CMS Java文件管理系统可以与其他业务系统(如CRM、ERP等)集成,实现数据共享和流程协同。 9. **安全性保障**:采用加密技术保护文件数据,防止未授权访问,同时系统还支持备份...

    JAVA SMB共享文件夹操作文件jar支持smb2、smb3.rar

    Java SMB(Server Message Block)库是用于在Java应用程序中访问和操作网络共享文件系统的工具,主要应用于Windows环境,但也可支持其他支持SMB协议的系统。SMB是一种网络通信协议,允许网络上的计算机共享文件、...

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

    总结来说,要在Android中实现SMB访问共享文件和播放共享文件,开发者需要借助第三方库,如jcifs-ng,建立SMB连接,并结合多媒体播放器框架。同时,要关注安全问题,确保数据传输和用户认证的安全性。在实际开发中,...

    Java写的文件共享服务器(源代码)

    这需要实现对文件系统的操作,包括创建、删除、重命名文件和目录,以及列出目录内容。 5. **HTTP或FTP协议**:文件共享服务器可能会使用HTTP或FTP协议来实现文件传输。HTTP是应用广泛、易于理解的协议,适合Web应用...

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

    - 支持Windows文件系统的大部分功能,包括文件读写、目录创建删除等。 - 提供了对SMB/CIFS协议的支持,使得开发者能够方便地访问Windows共享资源。 - 具有良好的跨平台特性,适用于多种操作系统环境下的开发工作...

    java向其他机器写文件 共享机器写文件

    JCIFS(Java CIFS)是一个Java类库,它允许Java应用程序通过CIFS(Common Internet File System)协议访问网络文件系统和打印机。CIFS是SMB(Server Message Block)协议的一种实现,广泛用于Windows系统之间的文件...

    使用smbj.jar访问共享文件夹,解决SMB2/SMB3共享文件夹访问的问题

    SMB是一种网络通信协议,主要用于在局域网内共享文件、打印机、串行端口和互联网连接。早期版本的SMB(如SMB1)存在一些安全漏洞和性能问题。随着技术的发展,SMB2和SMB3相继推出,带来了更高的性能、更强的安全性和...

    解决不能访问服务器共享文件的终极方案

    2. **权限设置**:如果你没有足够的权限访问特定共享文件,系统会拒绝访问。请检查你的用户账户是否被赋予了正确的访问权限,或者与管理员确认。 3. **防火墙或安全软件**:防火墙和安全软件可能阻止对服务器的连接...

    基于java的文件管理/网盘系统

    1. **Java语言**:Java是一种广泛使用的面向对象的编程语言,具有跨平台、安全性强、稳定性好等特性,是开发文件管理系统的基础。 2. **Servlet与JSP**:在服务器端,Java Servlet用于处理客户端请求,JSP(Java...

    JAVA试卷自动生成系统

    **JAVA试卷自动生成系统** Java试卷自动生成系统是一款基于Java编程语言开发的教育软件,它旨在帮助教师或教育机构快速、高效地创建个性化的考试试卷。该系统利用SQL Server数据库来存储试题、答案以及各类考试参数...

    java项目管理系统

    2. **后端架构**:基于Java的后端服务是系统的核心,可能使用Spring Boot或Java EE(Enterprise Edition)框架来实现。Spring框架提供了依赖注入、数据访问、安全控制和RESTful API等功能。 3. **数据库管理**:...

    在java中实现对access数据库的远程访问

    最后,在 A 服务器中编写测试程序,使用 java 语言连接到 RmiJdbc 服务,并访问 access 数据库。在编写测试程序时,需要引入 RmiJdbc 驱动程序,并使用 jdbc:rmi://[:port]>/<jdbc-url> 链接字符串连接到 RmiJdbc ...

    java内容管理系统

    在JavaPrj_8这个压缩包中,可能包含了该系统的源代码、配置文件、数据库脚本以及相关的文档资源。 首先,我们来深入理解Java在内容管理系统中的应用。Java作为一种跨平台的编程语言,因其强大的稳定性和安全性,常...

Global site tag (gtag.js) - Google Analytics