3

以下是我的一段代码

SmbFile catalExp = new SmbFile("smb://<Shared machine name>/Project share/Home/4.  Folders/planning - Design & Exec/sample.txt",
                    new NtlmPasswordAuthentication(LoadProp.getShrdDomain(),"user","paswd"));

在这我得到了错误

jcifs.smb.SmbException: The network name cannot be found
    at jcifs.smb.SmbTransport.send(SmbTransport.java:753)
    at jcifs.smb.SmbSession.sessionSetup(SmbSession.java:140)
    at jcifs.smb.SmbSession.send(SmbSession.java:103)
    at jcifs.smb.SmbTree.treeConnect(SmbTree.java:132)
    at jcifs.smb.SmbFile.connect(SmbFile.java:674)
    at jcifs.smb.SmbFile.connect0(SmbFile.java:644)
    at jcifs.smb.SmbFile.open0(SmbFile.java:700)
    at jcifs.smb.SmbFile.createNewFile(SmbFile.java:2027)

这与该特定共享文件夹的用户权限有关还是我做错了什么请建议

4

4 回答 4

2

我遇到了这个错误信息,原来问题是我的网络路径不正确。您需要确保NtlmPasswordAuthentication对象配置正确,网络路径正确,并且您已正确设置 jcifs.netbios.wins 属性,如本页第一个示例所示。

例如,要加载远程属性文件:

final NtlmPasswordAuthentication AUTH = new NtlmPasswordAuthentication("domainname", "username", "password");

Config.setProperty("jcifs.netbios.wins", "10.10.1.1");

Properties props = new Properties();
InputStream in = new SmbFileInputStream(new SmbFile("smb://10.10.1.1:445/rootfolder/path/filename.properties", AUTH));
props.load(in);

(您需要添加 try/catch 和输入流关闭)

确保所有参数正确的一个好方法是使用 smb/cifs 客户端测试登录和定位文件。例如 linux/unix 上的 smbclient:

smbclient -Uusername -p 139 //10.10.1.1/rootfolder

当您使用 smbclient 登录时,域会显示在顶部:

Domain=[DOMAINNAME]

..您可以导航到您的文件以确保您的路径正确。

于 2013-05-26T05:07:12.770 回答
1

在遇到这个问题将近 1 天后,我意识到这些异常毫无意义

  • 我只是给出了错误的服务器端位置路径

下面是为我工作的 groovy 代码的平静

        String domain = "domain"
        String user = "username"
        String pass = "password"
        String IP = "xx.yy.zz.aa"
        String sharedFolder="//my//path//to//server//";

    String path="smb://$IP"+sharedFolder+"test.txt";
    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, user, pass );
    SmbFile smbFile = new SmbFile(path,auth);
    SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile);
    smbfos.write("testing....and writing to a file".getBytes());
    System.out.println("completed ...nice !");
于 2020-04-08T06:50:46.967 回答
0

我遇到了这个问题,结果我没有看到映射到我的 Windows 共享驱动器的共享名称是什么......所以,使用 Mac OS,我运行:

smbutil view smb://MYUSERNAME@HOSTNAME

在提示我输入密码后,我看到了一个共享名称列表(当我使用 Windows 查看这些内容时,这并不明显)。一旦我找到我的共享名称,它就像在连接 JCIFS 时使用它一样简单:

new SmbFile("smb://HOSTNAME/SHARENAME/path/I/was/trying/to/access", auth);

于 2015-01-23T15:17:37.347 回答
0

好吧,我也收到此错误,但仅在一台设备上,我在 Android 4.04 上运行的代码是

 String strprog = "STRING CREATED| "; //debug log string
    try {
        strprog += "NTLM| ";
        NtlmPasswordAuthentication auth =  new NtlmPasswordAuthentication("username:password");
        strprog += "SMB| ";
        SmbFile file = new SmbFile("smb://<pcname>/foldername/filename.txt",auth);

        strprog += "EXIST| ";
        String there = String.valueOf(file.exists());

        strprog += "View| ";
        TextView pp;
        pp = (TextView) findViewById(R.id.tv);
        pp.setText(there);



    } catch (Exception e) {
        // TODO Auto-generated catch block
        strprog += "ERROR! ";
        TextView ll;
        ll = (TextView) findViewById(R.id.tv);


        ll.setText(strprog + e.getStackTrace().toString() + "    " +  e.getMessage() + "   " + e.getLocalizedMessage() );
    }

我看到的唯一区别是您NtlmPasswordAuth与我的比较。param但是正如我所说的那样,当我深入了解 smb://host 时,这会在 Andriod 2.0 上引发空输入,但我希望这对您有所帮助。

于 2012-09-01T09:38:14.107 回答