posts - 23,comments - 12,trackbacks - 0
   

本文涉及的几个关键字解释: 

SMB: Server Message Block, 用于共享例如文件、打印机、串口或者是命名管道等用于通讯的抽象对象;
CIFS:  Common Internet File System,  SMB的增强版,Windows 2000/XP实现了该协议;
JCIFS: 一个实现了CIFS的纯Java项目,无须任何的本地库。

JCIFS的网址: http://jcifs.samba.org/

下面我们看一个非常简单的例子,在运行这个例子之前必须准备两台机器A、B,其中我们A是我们程序运行所在的机器,而B则是被访问的机器,仅用B上的Guest用户,而且A当前的用户不能存在于B机器中,也就是说当我们通过资源管理器访问 \\B 的时候,会要求输入用户名以及口令,如下图所示:

 

 

 

 

 

这个时候A机器上的程序就不能通过例如 \\B\folder\1.txt 这样的路径来访问B机器上共享文件夹folder中的1.txt文件,也就是说Java中自带的File,FileInputStream类已经不起作用了,不信? 不信你丫试试

但是借助于JCIFS你就可以很容易的访问到文件1.txt的内容,我们先来看这个简单的例子:

import jcifs.smb.*;

public class Demo{
    public static void main(String[] args) throws Exception{
        //将user和password换成是B机器上的用户名以及口令
        SmbFileInputStream in = new SmbFileInputStream("smb://user:password@B/folder/1.txt" );
        byte[] b = new byte[8192];
        int n;
        while(( n = in.read( b )) > 0 ) {
            System.out.write( b, 0, n );
        }
    }
}

编译并运行这面的例子便可以打印文件 1.txt 的内容。
把上面例子中的密码填写成一个错误的密码再运行程序,便会得到 jcifs.smb.SmbAuthException 异常。

写文件也是一个道理,关于文件的操作JCIFS提供了这么几个类:SmbFile,SmbFileInputStream,SmbFileOutputStream,具体的用户跟Java中对应的类差不多。

JCIFS中文件的URL也就是smb_url,格式为:smb://{user}:{password}@{host}/{path} ,只要填好这个URL,JCIFS就会帮你搞定身份验证的事,粉简单的。

posted on 2005-08-19 11:18 my java 阅读(1910) 评论(1)  编辑  收藏 所属分类: java身份认证转帖

FeedBack:
# re: 在Java程序中访问Windows共享文件系统 [未登录]
2012-06-21 17:53 | javaer
多谢!!!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: