在Windows上使用jCIFS缓慢列出文件

时间:2013-01-29 23:46:06

标签: android jcifs

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一起使用。有什么想法吗?

4 个答案:

答案 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中使用,但是如果您明确地将域执行速度很慢。

关于密码,我认为共享文件夹的登录速度较慢是正常的。