Java读写Windows共享文件夹的方法实例_java

项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片、文件等。那么如何使用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下设置共享文件夹方法:Windows7下设置共享文件夹方法:http://www.jb51.net/os/windows/78034.html)

不论是Windows还是Linux的共享文件夹,使用Java smb访问共享文件夹的代码都是一样的,只是Windows与Linux配置共享文件夹的方式不一样。

测试代码如下:

InputStream in = null;
OutputStream out = null;
try {
  //获取图片
  File localFile = new File("C:/testjpg");
  String remotePhotoUrl = "smb://share:admin@11/sharedFolder/"; //存放图片的共享目录
  SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS_");
  SmbFile remoteFile = new SmbFile(remotePhotoUrl + "/" + fmtformat(new Date()) + localFilegetName());
  remoteFileconnect(); //尝试连接 

  in = new BufferedInputStream(new FileInputStream(localFile));
  out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile)); 

  byte[] buffer = new byte[4096];
  int len = 0; //读取长度
  while ((len = inread(buffer, 0, bufferlength)) != -1) {
    outwrite(buffer, 0, len);
  }
  outflush(); //刷新缓冲的输出流
}
catch (Exception e) {
  String msg = "发生错误:" + egetLocalizedMessage();
  Systemoutprintln(msg);
}
finally {
  try {
    if(out != null) {
      outclose();
    }
    if(in != null) {
      inclose();
    }
  }
  catch (Exception e) {}
}

以上代码中,使用了JCIFS框架提供的SmbFile类,这个类和Java的File类比较相似,使用这个类的对象,可以处理远程文件的读写。使用File对象读取本地文件,然后使用SmbFile对象写入远程文件。SmbFile的connect()方法可以尝试连接远程文件夹,如果账号或密码错误,将抛出连接异常。

当下载远程文件时,使用SmbFile对象读取远程文件即可,代码如下:

InputStream in = null ;
ByteArrayOutputStream out = null ;
try {
  //创建远程文件对象
  String remotePhotoUrl = "smb://share:admin@11/sharedFolder/testjpg";
  SmbFile remoteFile = new SmbFile(remotePhotoUrl);
  remoteFileconnect(); //尝试连接
  //创建文件流
  in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
  out = new ByteArrayOutputStream((int)remoteFilelength());
  //读取文件内容
  byte[] buffer = new byte[4096];
  int len = 0; //读取长度
  while ((len = inread(buffer, 0, bufferlength)) != - 1) {
    outwrite(buffer, 0, len);
  } 

  outflush(); //刷新缓冲的输出流
  return outtoByteArray();
}
catch (Exception e) {
  String msg = "下载远程文件出错:" + egetLocalizedMessage();
  Systemoutprintln(msg);
}
finally {
  try {
    if(out != null) {
      outclose();
    }
    if(in != null) {
      inclose();
    }
  }
  catch (Exception e) {}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 读写共享目录
读取共享文件夹
共享文件夹指定ip读写、windows7共享文件夹、windows 共享文件夹、windows10共享文件夹、mac共享windows文件夹,以便于您获取更多的相关知识。

时间: 2024-08-22 14:29:17

Java读写Windows共享文件夹的方法实例_java的相关文章

Java读写文件创建文件夹多种方法示例详解_java

出现乱码请修改为 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path), "GBK")); 一.获得控制台用户输入的信息 复制代码 代码如下: public String getInputMessage() throws IOException...{    System.out.println("请输入您的命令∶");    byte buffe

Java遍历Properties所有元素的方法实例_java

复制代码 代码如下:  //初始化properties Properties pro = new Properties(); try {    InputStream inStr = ClassLoader.getSystemResourceAsStream("wahaha.properties");    pro.load(inStr);} catch (FileNotFoundException e) {    e.printStackTrace();} catch (IOExce

java使用poi读取excel内容方法实例_java

复制代码 代码如下: import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.channels.FileChannel;import java.text.DecimalFormat;import java.text.SimpleDat

java中的Integer的toBinaryString()方法实例_java

在一次面试的过程中,遇到过这样的题目,题目的大概意思是:让写出Integer类中的toBinaryString()方法 也就是说,把Integer转换为Binary的过程写出来 但是我蒙的,在查了JDK的源码,发现了这个很好用的方法,在此给大伙看看 下面是我做的一个测试: 复制代码 代码如下: /** *  */package com.b510.test; /** * @author Hongten * @date 2013-12-15 */public class TestF {     pu

WINDOWS共享文件夹无法访问的解决方法

1.启用来宾帐户. "控制面板-用户帐户-启用来宾帐户" 2.安装NetBEUI协议. 查看"网上邻居"属性--查看"本地连接"属性--点击"安装"--查看 "协议"--看其中NetBEUI协议是否存在,如果存在则安装这个协议,如果不存在则表明已经安装了该协议,在Winxp系统默认的情况下该协议是已经安装好了的. 3.查看本地安全策略设置是否禁用了GUEST账号. 控制面板--管理工具--本地安全策略--用

Fedora自动挂载Windows共享文件夹与分区

一,自动挂载Windows共享文件夹 Fedora挂载Windows共享文件夹命令如下: mount -t cifs -o username=win用户名,password=win用户对应密码  //192.168.3.10/php_projects /mnt/www 注:请手动建立对应的文件夹/mnt/www. 开机自动挂载,可以把上面命令弄到开机脚本里去,但现在Fedora的开机脚本设置显得非常麻烦,由于涉及到网络连接的先后问题,此脚本需要在网络连接成功后运行才能正常加载.网上找了一下,还是

CentOS6.5挂载windows共享文件夹

由于工作需要,需要把本机的文件夹共享出去,然后让CentOS服务器临时使用下. 服务器使用的是CentOS系统,而本机使用的win7系统.考虑到是临时使用,所以就不打算搭建FTP和Samba服务器,直接通过CentOS挂载windows共享文件夹的方式来达到此目的. 既然是使用windows共享文件夹的方式,那么我们必须先在本机创建一个共享目录.如下: 在此需要注意下,我们给administrator管理员的共享权限是可读写权限.等下我们会在CentOS系统中进行测试该权限. 共享文件夹配置完成

windows共享文件夹如何让CentOS 6.5读取

由于工作需要,需要把本机的文件夹共享出去,然后让CentOS服务器临时使用下. 服务器使用的是CentOS系统,而本机使用的win7系统.考虑到是临时使用,所以就不打算搭建FTP和Samba服务器,直接通过CentOS挂载windows共享文件夹的方式来达到此目的. 既然是使用windows共享文件夹的方式,那么我们必须先在本机创建一个共享目录.如下:     在此需要注意下,我们给administrator管理员的共享权限是可读写权限.等下我们会在CentOS系统中进行测试该权限.   共享文

Mac访问Windows共享文件夹

  第一步:在先Windows中新建文件夹e:iOS,右键设置共享属性 点击"高级共享" 点击"权限",设置你想要共享权限的用户完全控制,这样在Mac OS可以读和写操作,否则只能读 再设置文件NTFS权限,Jinhill用户所在Administrators组有完全控制权限 第二步:进入Mac OS,"前往""连接服务器" 添加smb://ip,该IP是windows共享文件夹所在机器的ip 点连接,期间可能会弹出要求输入用户