以下是我的代码
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)
这与该特定共享文件夹的用户权限有关,还是我做错了什么 请建议
答案 0 :(得分:2)
我遇到了此错误消息,结果发现问题是我的网络路径不正确。您需要确保正确配置NtlmPasswordAuthentication
对象,网络路径正确,并且正确设置了jcifs.netbios.wins属性,如第一个示例所示{{3} }。
例如,要加载远程属性文件:
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]
..您可以导航到您的文件,以确保您的路径正确。
答案 1 :(得分:1)
在遇到此问题将近1天后,我意识到这些异常毫无意义
下面是和平代码对我有用
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 !");
答案 2 :(得分: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
与我的相比。
但正如我之所说的那样,当我深入smb:// host时,它会在Andriod 2.0上抛出空输入param
,但我希望这可以帮助你。
答案 3 :(得分:0)
我遇到了这个问题,结果发现我没看到映射到我的Windows共享驱动器的共享名称是什么...所以,使用Mac OS,我运行了:
smbutil view smb://MYUSERNAME@HOSTNAME
在提示我输入密码后,我显示了一个共享名称列表(当我使用Windows查看这些内容时,这些名称并不明显)。一旦找到了我的共享名称,就像使用JCIFS连接时一样简单:
new SmbFile("smb://HOSTNAME/SHARENAME/path/I/was/trying/to/access", auth);