在 Windows 上使用 jCIFS 列出慢速文件
Posted
技术标签:
【中文标题】在 Windows 上使用 jCIFS 列出慢速文件【英文标题】:Slow file listing with jCIFS on Windows 【发布时间】:2013-01-13 16:34:29 【问题描述】:jCIFS 是一个很棒的库,用于连接到 android 上的 SMB 共享,它几乎适用于我测试过的所有设置。
但是,在基于 Windows 的网络共享上使用 SmbFile.listFiles()
方法时,我确实会遇到非常慢的性能,但仅限于在 PC 上以实际用户身份登录时。简单地获取文件夹列表可能需要几分钟时间,有时根本没有任何反应。
如果我选择以访客身份登录(使用“访客”作为用户,密码为空),一切都会很快。通常不到一秒钟。
以下代码可以运行,而且速度很快:
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
一起工作。有什么想法吗?
【问题讨论】:
【参考方案1】:使用new SmbFile("username:password@server/")
有效,所以我只是使用它。
【讨论】:
【参考方案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
【讨论】:
【参考方案3】:尝试使用new SmbFile("smb://host-name-for-my-pc/", authentication);
。
以斜线结尾。
【讨论】:
你有任何证据证明它有效吗?如果不是,这应该是评论,而不是答案。 它不起作用,我在发布问题之前已经尝试了很久。【参考方案4】:我在图书馆遇到了同样的问题。我可以看到解决问题的所有答案都没有域属性,我尝试不使用该属性并且我看到问题已解决,我认为该库默认用于 LAN,但如果您明确放置域执行很慢。
关于密码,我觉得登录共享文件夹比较慢是正常的。
【讨论】:
以上是关于在 Windows 上使用 jCIFS 列出慢速文件的主要内容,如果未能解决你的问题,请参考以下文章
JCIFS 是不是与 windows 2008 R2 域控制器不兼容?