java访问局域网共享文件或共享文件夹
java访问局域⽹共享⽂件或共享⽂件夹
java访问局域⽹共享⽂件或共享⽂件夹
前⾔
春雨里洗过的太阳
    准备写这篇博客是因为最近⼏天由于项⽬需要访问远程路径下的共享⽂件,之前没接触过涉及这⽅⾯的技术,百度了⼀番,发现基于java 实现这个技术的有--jcifs。现在记录⼀下⼀些简单使⽤过程和遇到的⼀些问题和解决办法。
简介
  通⽤Internet⽂件系统
  在windows主机之间进⾏⽹络⽂件共享是通过使⽤微软公司⾃⼰的CIFS服务实现的。 
  CIFS 是⼀个新提出的协议,它使程序可以访问远程Internet计算机上的⽂件并要求此计算机的服务。CIFS 使⽤客户/服务器模式。客户程序请求远在服务器上的服务器程序为它提供服务。服务器获得请求并返回响应。CIFS是公共的或开放的SMB协议版本,并由Microsoft使⽤。SMB协议(见最后的名词解释)现在是局域⽹上⽤于服务器⽂件访问和打印的协议。象SMB协议⼀样,CIFS在⾼层运⾏,⽽不象TCP/I
P协议那样运⾏在底层。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的接⼝形式,在多线程的⼯作⽅式下被证明是有效⽽容易使⽤的。
简单使⽤
qq会员签到  使⽤单元测试
1、登录:填写服务器ip,域名、登录账号、登录密码,可以查看是否能正常访问。
1      //登陆
2            UniAddress address = ByName("ip");//别离的诗句
3            NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("域名", "登陆账号", "登陆密码");
4            SmbSession.logon(address, auth);
  2、获取远程⽂件资源:
    ⽅式1:需要域名的情况
      smb://域名;登录账号:登录密码@服务器ip/⽂件夹名称/
   ⽅式2:不需要域名的情况
      smb://登录账号:登录密码@服务器ip/⽂件夹名称/
苹果平板电脑怎么用  ⽅式3:不需要⽤户名密码的情况
松子怎么炒      smb://服务器ip/⽂件夹名称/
需要注意的问题:1、如果是⽂件夹后边需要加 '/' 斜杠,不然操作⽅法的时候回报错。
        2、第⼆种情况是我⾃⼰遇到的,我访问的共享⽂件是在某个域中,但是不写域名也能访问成功,格式是这样的:smb://;登录账号:登录密码@服务器ip/⽂件夹名称/但是不能省略域名和登录账号之间的 ';' 分号。没看源码所以不知道什么情况,有知道的可以分享下。
      SmbFile smbFile = new SmbFile("smb://域名;登录账号:登录密码@服务器ip/⽂件夹名称/");
        if(smbFile.isDirectory()){//判断是否是⽂件夹,判断是否是⽂件:smbFile.isFile(),这个跟java.io.
File的⽅法类似
SmbFile[] listFiles = smbFile.listFiles();//获取所有⽂件
System.out.println(listFiles.length);//⽂件数量
for (SmbFile smbFile2 : listFiles) {
System.out.Name());//⽂件名
            InputStream is = InputStream();//获取输⼊流
System.out.Path());//smb协议下的服务器⽂件路径
}
开通农行网上银行}
  3、读取⽂件速度太慢,当你想把共享⽂件下载到本地的时候,你会发现很慢。这⾥提供⼀个解决⽅案。
System.setProperty("jcifs.smb.client.dfs.disabled","true");//禁⽤dfs,提⾼读取速度
  在new SmbFile();之前设置。
4、读取windows10下的共享⽂件失败。是因为windows10下默认没勾选SMB 1.0/CIFS⽂件共享⽀持,也就是没启⽤SMB1.0协议,jcifs只⽀持1.0。
解决⽅案:打开控制⾯板-->程序和功能-->点击左侧下的启⽤或关闭windows功能-->勾选SMB 1.0/CIFS⽂件共享⽀持,重启系统。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。