gpt4 book ai didi

java - 重用 JCIFS SMB 连接来检查各种文件是否存在

转载 作者:行者123 更新时间:2023-11-30 08:45:48 24 4
gpt4 key购买 nike

使用 JCIFS 可以轻松检查文件是否存在:

  1. 您设置凭据:
import jcifs.smb.*;
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("domain", "username", "password");
  1. 您与文件建立连接:
SmbFile file = new SmbFile("smb://server/filepath", auth);
  1. 你检查它是否存在:
if( file.exists() ) { ... }

现在假设您想将所有这些放入循环中并检查是否存在各种文件。我假设在这种情况下 new SmbFile("smb://server/filepath", auth); 将为每个文件建立一个新连接。我说得对吗?

所以我的问题是:通过 SMB 测试文件是否存在的资源占用最少的方法是什么?

我在考虑让file指向SMB根目录,然后使用file.listFiles(java.lang.String wildcard)检查文件是否存在。但问题是 listFiles 不能递归工作。我可以包装它并使它递归,但这并不干净。

最佳答案

回应:

new SmbFile("smb://server/filepath", auth); will set up a new connection for each file

直到您实际尝试对服务器执行某些操作(例如检查是否存在),连接才会建立。但是,它使用相同的连接与服务器通信以进行操作。 SmbTransport类是处理这个的东西。您可以使用 wireshark 或任何其他监控工具来查看操作是否使用与服务器的相同连接。

因此,为了响应“检查a 文件是否存在的资源占用最少的方法”,您检查它是否存在。

如果您正在检查多个文件,并且您已经知道它们的名称,那么只检查是否存在仍然是最有效的方法。

如果您不知道文件的名称,并且您使用 listFiles(和子目录下降),那么您将从服务器请求更多的数据,例如项目的每个条目属性,无论它们是否是目录,目录有数百个,也许数千个条目,这可能相当于在遍历树时要缓存的很多数据。

关于java - 重用 JCIFS SMB 连接来检查各种文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33119135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com