用普通的File是不是不能访问到另一台windows上的共享文件?这几天遇到一个问题, 用 new File("\\\\hostA\\folderA\\fileA").exists()查询另一台windows上的的共享文件是否存在总是返回false.
但如果远端计算机是Linux系统用Samba创建的共享文件夹的文件则可以找到此文件。以前好像遇到过类似的问题,需要用到另外Samba的库来访问共享文件,File类好像不支持
但是这回为什么如果远端机器是Linux就可以访问呢,到底File类支不支持\\hostA\folderA\fileA这种访问方法??

解决方案 »

  1.   

    访问windows一般用‘/’,你试试
      

  2.   

    你试试这样写:
    new File("file:\\\\hostA\\folderA\\fileA");
    我也稍有点印象,但是记不大清楚了。
      

  3.   

    在网上找了找好象sun的JDK在这里有些bug基本上是转URL,URI时产生的我试了楼上的方法在前面加上file:结果还是找不到文件
    但是看来File类是支持这个远程共享文件访问的现在不知道是windows共享设置的问题还是Java的访问路径组织问题
    但windows共享设置真的看起来没问题了,所以更相信是在Java这边访问时的问题
      

  4.   

    是的,API里也注明是可以这样做的。
    也许是你写的有问题也说不定。
      

  5.   

    但是程序里这一段很简单就是fileName = somePath;//somePath = "\\\\hostA\\folderA\\fileA"
    if (new File(fileName).exists()){...}
    else {...}
      

  6.   

    cmd中运行:
    net share
    这个是本机所有的共享。
    你看看你写的共享名对么?
    或者别用那个exists判断,直接取这个文件用。
    这个exists方法有时候也不好用的。
      

  7.   

    SMB协议,地方包,前两天看了下。
    http://java.chinaitlab.com/net/803563.html
    有例子,测试了下,能运行。
      

  8.   

    使用jcifs实现访问共享目录。里面有SmbFile对象对文件进行操作。
      

  9.   

    我测试过 ,\\hostA\folderA\fileA 方法可以访问。
    可能是你 windows 的权限问题
      

  10.   

    是不是路径不对啊 linux下面有 /hosts文件系统在windows下面要 加上 C D 等盘符 表示绝对路径吧
      

  11.   

    谢谢大家
    很感动!!
    哈哈
    我会试试大家的建议
    还有abc130314能不能告诉我你jre的版本和windows共享的具体设置么?
      

  12.   

    我想问题找到了
    最后还是权限问题
    验证这个共享文件是否存在其实是在一个servlet中
    而容器tomcat是以System作为用户启动的服务
    所以很自然的他没有权限访问其他计算机上的共享文件
    结帖了
    但是很奇怪的是用tomcat Monitor不能以其他用户启动tomcat
    我再开个帖子,有了解的请继续给我点帮助