我想访问其他服务器上的共享文件。例如:我的机器IP是10.10.10.1,另一台机器IP是10.10.10.2,用户:user,密码:pass。上面有一个共享目录是share,share里面有一个test.txt文件,我想通过我的机器访问这个test.txt,我觉得应该用uri类,不知道表达式怎么写,请各位指点,请贴出简单代码,或者有其他解决方案。多谢

解决方案 »

  1.   

    http://10.10.10.2/share/test.txt在登录的时候,会让你输入用户名和密码
      

  2.   

    http://forum.java.sun.com/thread.jspa?forumID=51&threadID=463909
      

  3.   

    http://10.10.10.2/share/test.txt在登录的时候,会让你输入用户名和密码---------------------------------------
    楼主可能不希望这样
      

  4.   

    我想知道远端服务器上文件的uri表达式怎么写?因为我会用到java.net.URI类。
    比如:file:////10.10.10.2/share/test.txt
    但是用户名和密码加在表达式的哪里,又没有相关的教程和文档,请指点。
      

  5.   

    那样好像不行, 我在java.sun.com上搜了一下, 只发现有用这种方法的.你要到下面的网站去下载jar档.文档,例子也有.http://jcifs.samba.org/#ggviewer-offsite-nav-8990840
      

  6.   

    给你个sample吧, 不过你得先在上面列出的网站下载jar档才能运行.import java.io.File;
    import java.net.UnknownHostException;import jcifs.UniAddress;
    import jcifs.smb.*;public class SharedAccess
    { /**
     * @param args
     */
    public static void main(String[] args)
    {
    // TODO Auto-generated method stub try
    {
    UniAddress dc = UniAddress.getByName("10.xx.xx.xx");
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication( "username:password");//这里改成你自己的,username和password中间要有:
    SmbSession.logon(dc, auth);
    System.out.println("logon succeed");//这里如果打印出来了就说明已经可以直接访问了(不用再输用户名和密码) File dir = new File("\\\\10.xx.xx.xx\\d$\\ptc");//这里我只列出目录下包含的内容, 你要做什么就看你的了.
    String[] files = dir.list();
    for (int i = 0; i < files.length; i++)
    {
    System.out.println(files[i]);
    }
    } catch (SmbException smbExp)
    {
    System.err.println(smbExp.getMessage());
    } catch (UnknownHostException UHExp)
    {
    ;
    } }}我已在我的机器上测试通过.我的环境是xp + jdk1.5, 另一台机器装的是windows2003.我用的编译器是eclipse 3.1
      

  7.   

    sorry, 我刚才又反复测试了一下, 发现在别的机器上运行上面的代码会出错.后来我发现我这边没出错的原因是我在运行前已经登陆了那台机器, 所以我在读取那台机器上的文件和目录时就不需要验证用户名和密码.所以我在上面贴出的代码是错误的, 我对于我的自以为是表示道歉.
      

  8.   

    楼主有没有试出来, 我已经在几台机器上测试了一下, 访问共享的目录没问题.代码如下:
    import jcifs.smb.*;public class SharedAccess
    { /**
     * @param args
     */
    public static void main(String[] args)
    {
    // TODO Auto-generated method stub try
    {
    SmbFile dir = new SmbFile( "smb://username:[email protected]/my/");//我用的都是administrator登录,my是共享目录的名称.
    String[] files = dir.list();
    for (int i = 0; i < files.length; i++)
    {
    System.out.println(files[i]);
    }
    } catch (Exception exp)
    {
    System.err.println(exp.getMessage());
    } }
    }有一次在一台机器上运行时, 发现没有输出, 也不报错, 后来才想起来被访问的机器有防火墙, 其它网段的IP不能访问这台机器.然后把防火墙关了, 结果OK. 我这环境比较复杂, 不过遇到的情况可以供大家借鉴.