如何使用带有apache VFS的JCIFS来访问SMB URL?

Mic*_*mer 6 java apache smb jcifs apache-commons-vfs

我正在尝试使用smb URL访问本地计算机上的文件夹.我的项目使用的是jar:commons-vfs2-2.0.jar和jcifs-1.3.17.jar(以及所有其他必需的jar).其中的代码是:

public static void main(String[] args) throws FileSystemException {
    jcifs.Config.registerSmbURLHandler();
    StaticUserAuthenticator auth = new StaticUserAuthenticator(<domain>,<user>,<password>);
    FileSystemOptions opts = new FileSystemOptions(); 
    DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
    FileSystemManager fs = VFS.getManager();
    FileObject smbFile = fs.resolveFile("smb://10.0.2.2/TimeOut/");
    System.out.println(smbFile.exists() + " " + smbFile.getContent().getLastModifiedTime());
}
Run Code Online (Sandbox Code Playgroud)

我收到了例外:

线程"main"中的异常org.apache.commons.vfs2.FileSystemException:无法确定文件类型"smb://10.0.2.2/TimeOut".at org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:505)位于com.newsway.tests.VfsTest的org.apache.commons.vfs2.provider.AbstractFileObject.exists(AbstractFileObject.java:477) .main(VfsTest.java:23)引起:jcifs.smb.SmbAuthException:登录失败:帐户当前已禁用.在jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:546)jcifs.smb.SmbTransport.send(SmbTransport.java:663)jcifs.smb.SmbSession.sessionSetup(SmbSession.java:390)jcifs.smb. SmbSession.send(SmbSession.java:218)在jcifs.smb.SmbTree.treeConnect(SmbTree.java:176)jcifs.smb.SmbFile.doConnect(SmbFile.java:911)jcifs.smb.SmbFile.connect(SmbFile) .java:954)jcifs.smb.SmbFile.open(SmbFile.java:880)jcifs.smb.SmbFile.open(SmbFile.java:972)jcifs.smb.SmbFile.open(SmbFile.java:1006)在jcifs.smb.SmbFileInputStream.(SmbFileInputStream.java:73)jcifs.smb.SmbFileInputStream.(SmbFileInputStream.java:65)at jcifs.smb.SmbFile.getInputStream(SmbFile.java:2844)at org.apache.commons. vfs2.provider.url.UrlFileObject.doGetType(UrlFileObject.java:89)在org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)

据我所知,相关部分是:登录失败:帐户目前已禁用.

尽管我的用户/密码/域很好,但我正在完成VFS文档页面中定义的内容.

我错过了什么?

小智 -1

我使用了不同的身份验证方法并且有效,您可以尝试一下。

String url = "smb://10.0.2.2/TimeOut/";   
NtlmPasswordAuthentication authen = new NtlmPasswordAuthentication(<domain>,<username>,<password>); 
SmbFile smbFile = new SmbFile(url,authen);
Run Code Online (Sandbox Code Playgroud)