项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片、文件等。那么如何使用Java读写Windows共享文件夹呢?
Java可以使用JCIFS框架对Windows共享文件夹进行读写,就这个框架可以让我们像访问本地文件夹一下访问远程文件夹。
JCIFS的网址: http://jcifs.samba.org/
JCIFS是使用纯Java开发的一个开源框架,通过smb协议访问远程文件夹。该框架同时支持Windows共享文件夹和Linux共享文件夹,不过,Linux共享文件夹需要安装Samba服务软件(官网:http://www.samba.org/)。
SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。通过设置“NetBIOS over TCP/IP”使得Samba不但能与局域网络主机分享资源,还能与全世界的电脑分享资源。
本文主要学习一下使用Java访问Windows共享文件夹的方法。
首先找一台Windows机器,在任意位置创建文件夹:sharedFolder,并设置为共享,设置共享用户名:share,密码:admin。
(Windows7下设置共享文件夹方法:http://hi.baidu.com/51_xuexi/item/5a90a20cd732a8ce75cd3c6d)
不论是Windows还是Linux的共享文件夹,使用Java smb访问共享文件夹的代码都是一样的,只是Windows与Linux配置共享文件夹的方式不一样。
测试代码如下:
- InputStream in = null;
- OutputStream out = null;
- try {
- //获取图片
- File localFile = new File("C:/test.jpg");
- String remotePhotoUrl = "smb://share:admin@192.168.135.11/sharedFolder/"; //存放图片的共享目录
- SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS_");
- SmbFile remoteFile = new SmbFile(remotePhotoUrl + "/" + fmt.format(new Date()) + localFile.getName());
- remoteFile.connect(); //尝试连接
- in = new BufferedInputStream(new FileInputStream(localFile));
- out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
- byte[] buffer = new byte[4096];
- int len = 0; //读取长度
- while ((len = in.read(buffer, 0, buffer.length)) != -1) {
- out.write(buffer, 0, len);
- }
- out.flush(); //刷新缓冲的输出流
- }
- catch (Exception e) {
- String msg = "发生错误:" + e.getLocalizedMessage();
- System.out.println(msg);
- }
- finally {
- try {
- if(out != null) {
- out.close();
- }
- if(in != null) {
- in.close();
- }
- }
- catch (Exception e) {}
- }
以上代码中,使用了JCIFS框架提供的SmbFile类,这个类和Java的File类比较相似,使用这个类的对象,可以处理远程文件的读写。使用File对象读取本地文件,然后使用SmbFile对象写入远程文件。SmbFile的connect()方法可以尝试连接远程文件夹,如果账号或密码错误,将抛出连接异常。
当下载远程文件时,使用SmbFile对象读取远程文件即可,代码如下:
- InputStream in = null ;
- ByteArrayOutputStream out = null ;
- try {
- //创建远程文件对象
- String remotePhotoUrl = "smb://share:admin@192.168.135.11/sharedFolder/test.jpg";
- SmbFile remoteFile = new SmbFile(remotePhotoUrl);
- remoteFile.connect(); //尝试连接
- //创建文件流
- in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
- out = new ByteArrayOutputStream((int)remoteFile.length());
- //读取文件内容
- byte[] buffer = new byte[4096];
- int len = 0; //读取长度
- while ((len = in.read(buffer, 0, buffer.length)) != - 1) {
- out.write(buffer, 0, len);
- }
- out.flush(); //刷新缓冲的输出流
- return out.toByteArray();
- }
- catch (Exception e) {
- String msg = "下载远程文件出错:" + e.getLocalizedMessage();
- System.out.println(msg);
- }
- finally {
- try {
- if(out != null) {
- out.close();
- }
- if(in != null) {
- in.close();
- }
- }
- catch (Exception e) {}
- }
相关推荐
要使用Java读写Windows共享文件夹,首先需要在Windows上设置共享文件夹。以Windows 7为例,可以在任意位置创建一个文件夹,例如名为"sharedFolder",然后在文件属性中设置共享权限,添加用户名和密码,比如:share和...
在Android中,一个常用且强大的库是SMBJ,它允许我们通过Java实现Server Message Block(SMB)协议来访问Windows共享文件夹。 SMB协议是一种应用层协议,主要用于在计算机之间共享文件、打印机、串行端口和网络上的...
在Java编程环境中,有时我们需要与Windows操作系统进行交互,例如访问共享目录并下载其中的文件。这个过程涉及到几个关键的技术点,包括系统调用、网络通信和文件操作。在这个场景下,我们将通过`SmbUtils.java`和`...
综上所述,实现Java在Windows环境下的文件共享需要理解Java的文件I/O、网络编程原理,掌握SMB协议的实现方式,以及Windows系统中的共享文件夹设置。通过使用合适的库和正确的异常处理策略,可以构建稳定、高效的应用...
使用smbj.jar,开发者可以创建Java程序来连接到远程服务器的共享文件夹,执行读写操作,甚至管理文件权限。以下是一些核心知识点: 1. **安装与引入**:首先,你需要下载smbj.jar并将其添加到你的项目类路径中。...
- 浏览网络共享文件夹,获取文件和目录列表。 - 读取、写入、移动、复制、重命名和删除文件。 - 创建和删除目录。 - 实现文件的断点续传和并发上传下载。 - 监听SMB共享上的文件系统事件,实现自动化处理。 - 处理...
4. **使用jcifs库**:jcifs库是Java的一个第三方库,它实现了CIFS(Common Internet File System)协议,使得Java可以方便地操作Windows网络共享。安装jcifs后,你可以像这样创建SmbFile对象并读取文件: ```java ...
java 读取局域网机器上共享文件,以经过测试。
在IT行业中,尤其是在分布式系统和网络编程领域,"Java共享文件夹接口"是一个重要的概念,它允许客户端应用程序访问和操作远程服务器上的文件,尤其是Word文档。这个接口的设计目的是为了实现跨平台的数据共享和协作...
System.out.println("共享文件夹存在"); } else if (file.exists() && !file.isDirectory()) { BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream())); String line; ...
标题中的"jcifs跨服务器操作共享文件夹.tgz"提到了jcifs库,这是一个Java库,主要用于在不同服务器之间进行SMB(Server Message Block)协议的文件操作,比如访问、读写共享文件夹。SMB是一种广泛用于Windows网络中...
最后,`java_reader` 文件夹可能包含了用Java编写的RFID读写器客户端应用。Java是一种跨平台的编程语言,具有“一次编写,到处运行”的特性。这里的Java源码可能是一个示例程序,演示如何使用前面提到的DLL(通过JNI...
### Oracle VirtualBox共享文件夹问题详解 在Oracle VirtualBox中,实现主机与客户机之间的文件共享是一项常见且实用的功能,尤其对于使用不同操作系统的环境,如本例中的WinXP主机与Ubuntu10.04客户机,更是必不可...
Samba是一个开源软件,允许Linux/Unix系统与Windows系统之间进行文件共享,而jcifs是Java的一个库,它提供了对SMB(Server Message Block)协议的支持,使得Java程序能够无缝地操作Samba网络共享资源。 首先,我们...
例如,读取位于`10.130.14.111`的共享文件夹`share`中的文件`aa.txt`: ```java SmbFile smbFile = new SmbFile("smb://administrator:dibindb@10.130.14.111/share/aa.txt"); SmbFileInputStream in = new ...
完成以上步骤后,Samba文件夹共享服务器已经配置完毕,Windows和Mac用户可以无阻碍地访问CentOS上的共享文件夹,提高跨平台协作的效率。记得在生产环境中,根据实际需求调整安全设置,例如限制匿名访问,启用用户...
### 共享参数 #### SharedPreferences `SharedPreferences`是一种轻量级的数据...以上是关于共享参数、文件读写及网络访问(GET/POST)的基本概念和技术要点。在实际开发过程中,还需要考虑异常处理、安全性等问题。
CIFS(Common Internet File System)是一种广泛使用的文件共享协议,尤其在Windows环境中。jcifs是一个开源的Java库,它允许Java应用程序通过CIFS协议与远程文件系统进行交互,比如创建、读取、写入和删除文件或...
jcifs (Java CIFS Client Library) 是一个开源的 Java 库,它实现了客户端接口文件系统(Client Interface File System, CIFS),也称为 SMB 协议,允许 Java 应用程序访问网络共享资源,如 Windows 文件服务器或 ...