尝试列出Sharefolder中的所有文件时

时间:2019-10-09 13:15:14

标签: java samba smb ntlm-authentication

我正在尝试使用SmbFileNtlmPasswordAuthentication递归检查公司共享文件夹中的特定文件。

由于我不太了解Java,因此我遵循了Internet上的示例,但是每当尝试执行root.listFiles()时,都会不断出现以下错误:

jcifs.smb.SmbException: Failed to connect: foldername/xx.xx.xx.xxx
jcifs.util.transport.TransportException
java.net.SocketException: Connection reset


我确实具有对共享文件夹的访问权限,所以我最初的想法是我的代码中缺少某些内容,而是出现了身份验证或代理错误。我正在使用以下格式的网址:smb://foldername/something/somethingelse/anothersomething/

我的代码:

    public static Boolean checkDiretory(String location, String docName){
        Boolean result = false;
        try {
            NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", Consts.username, Consts.password);
            SmbFile root = new SmbFile(location, auth);
            List<SmbFile> files = Arrays.asList(root.listFiles());
            for(SmbFile file : files){
                if(file.isDirectory()){
                    result = checkDiretory(file.getPath(), docName);
                    if(result)
                        return result;
                }
                else{
                    if(file.exists() && file.getName().contains(docName)){
                        return true;
                    }else{
                        result = false;
                    }
                }
            }
        } catch (SmbException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return result;
    }

1 个答案:

答案 0 :(得分:0)

就像Eliad Cohen建议的那样,由于jcifs中的SMBv2不兼容,您可能不得不更改为SMBJ

我发现了类似的问题here,可以帮助您解决此问题。

请记住,主机只是您的路径!

编码愉快!