`
shijian0306
  • 浏览: 65946 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

用JAVA访问共享文件系统

阅读更多
用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。
分享到:
评论

相关推荐

    基于Java的共享学习资源系统的设计与实现【附源码】

    SQL Server具有使用方便可伸缩性好与相关软件集成程度高等优点,本系统将采用SQL Server技术建立多个数据库表用来记录学生的账号信息、管理员信息、学生个人共享的学习资源和所有学生共享的学习资源。 (3)JDBC ...

    毕设课设-java共享网盘jsp+servlet文件管理系统

    在线共享网盘采用jsp+servlet搭建项目结构实现共享网盘,项目分为管理员,普通用户和会员三种角色,根据不同角色控制不同权限,实现不同用户对个人文件文件,所有文件,共享文件的增删改查操作。 项目适用人群 正在...

    java源码包---java 源码 大量 实例

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    虚拟机LINUX与主机WINDOWS文件共享

    虚拟机LINUX与主机WINDOWS文件共享

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包4

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包3

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包2

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    Java思维导图xmind文件+导出图片

    CDN静态文件访问 分布式存储 分布式搜索引擎 应用发布与监控 应用容灾及机房规划 系统动态扩容 分布式架构策略-分而治之 从简到难,从网络通信探究分布式通信原理 基于消息方式的系统间通信 理解通信协议...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    基于JAVA的网络通讯系统设计与实现的毕业设计

    本设计以JAVA语言为基础,设计并实现一个基于TCP/IP协议的网络通讯系统。系统包括服务端和客户端两个部分,服务端负责接收客户端的连接请求,处理客户端的请求并返回相应的结果,客户端负责向服务端发送请求并接收服务端...

    Java开发技术大全(500个源代码).

    declareProtected.java 保护访问权限的使用 deriveClass.java 子类访问父类变量示例 getLinePara.java 获取命令行参数示例 hasStaticMethod.java 静态成员方法示例 hasStatMember.java 静态成员变量示例 ...

    基于Java web的租车系统(前后端源码+数据库).zip

    系统基于租车业务而搭建的服务平台,可为用户提供商务租车、接送机、旅游租车、企业租车、自驾租车、婚庆用车等自助租车服务。系统根据相关版本提供相关内容服务。包含车辆库管理、司机管理、订单管理、活动管理、...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...

    复制的分布式文件系统:用Java实现的复制的分布式文件系统

    用户可以提交对存储在分布式文件系统中的共享文件自动执行的多个操作。 文件未分区。 假设:每个事务只能访问一个文件。 存储在分布式文件系统上的每个文件都有一个主副本。 这意味着您将需要通过类似于被动(主...

    JAVA文件传输的实现.rar

    Java文件传输的实现可以应用于各个领域,包括但不限于文件备份、文件同步、远程文件访问、在线文档管理等。 在企业级应用中,可以作为分布式系统中的文件传输组件,实现不同节点之间的文件共享和同步。 通过Java文件...

    毕业设计网盘系统设计+毕业设计商城设计系统+Java

    文件共享模块将允许用户共享文件给其他用户,以及设置访问权限。 该系统还将使用缓存和队列技术来提高性能和响应时间。此外,它将使用 Docker 和 Kubernetes 进行部署和扩展,以确保系统的可靠性和可扩展性。 最后...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...

    JAVA文档管理系统.rar

    JAVA文档管理系统源码,文档管理系统(DMS)使企业可以控制电子文档的生产,存储,管理和分发,从而产生更大的效力和能力重用信息并控制文档流。将所有基本文档管理,协作和高级搜索功能集成到一个易于使用的解决...

Global site tag (gtag.js) - Google Analytics