jCIFS是一个很棒的库,用于连接Android上的SMB共享,它几乎可以用于我测试过的所有设置。
但是,在基于Windows的网络共享上使用SmbFile.listFiles()
方法时,我确实遇到了令人难以置信的低速性能,但仅在以PC上的实际用户身份登录时才会出现。简单地获取文件夹列表可能需要几分钟,有时根本没有任何事情发生。
如果我选择以访客身份登录(以“guest”作为用户登录,并将密码保留为空),则一切都很快。通常不到一秒钟。
以下代码有效且速度很快:
try {
NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication("", "guest", ""); // domain, user, password
currentFolder = new SmbFile("smb://host-name-for-my-pc", authentication);
SmbFile[] listFiles = currentFolder.listFiles();
} catch (Exception e) { // Using Exception for the sake of demonstration...
但是,这段代码不起作用/非常慢:
try {
NtlmPasswordAuthentication authentication = new NtlmPasswordAuthentication("", "my-username", "my-password"); // domain, user, password
currentFolder = new SmbFile("smb://host-name-for-my-pc", authentication);
SmbFile[] listFiles = currentFolder.listFiles();
} catch (Exception e) { // Using Exception for the sake of demonstration...
我和另一个正在使用jCIFS的人交谈过,他遇到了同样的问题。
我尝试使用ES文件资源管理器连接到同一个共享,它也使用了jCIFS,无论使用真实帐户还是以访客身份登录,它都很快。
更新
如果我改用SmbFile("username:password@server/")
,它就可以了!不过,我真的希望它与NtlmPasswordAuthentication
一起使用。有什么想法吗?
答案 0 :(得分:5)
使用new SmbFile("username:password@server/")
有效,所以我只是使用它。
答案 1 :(得分:2)
尝试在实例化任何jCIFS类之前使用以下代码:
jcifs.Config.setProperty("resolveOrder", "DNS");
感谢Glenn's回答 JCIFS: file retrieval is too slow to be usable
价: https://jcifs.samba.org/src/docs/api/overview-summary.html
答案 2 :(得分:1)
尝试使用new SmbFile("smb://host-name-for-my-pc/", authentication);
。
最后有一个斜线。
答案 3 :(得分:0)
我在图书馆遇到同样的问题。我可以看到所有解决问题的答案都没有domain属性,我尝试不使用该属性,但发现问题已解决,我认为默认情况下该库在LAN中使用,但是如果您明确地将域执行速度很慢。
关于密码,我认为共享文件夹的登录速度较慢是正常的。