【发布时间】:2012-07-21 16:45:27
【问题描述】:
我正在尝试使用 smb URL 访问本地计算机上的文件夹。 我的项目正在使用罐子:commons-vfs2-2.0.jar 和 jcifs-1.3.17.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());
}
我收到异常:
线程“main”中的异常 org.apache.commons.vfs2.FileSystemException:无法确定 文件类型“smb://10.0.2.2/TimeOut”。在 org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:505) 在 org.apache.commons.vfs2.provider.AbstractFileObject.exists(AbstractFileObject.java:477) 在 com.newsway.tests.VfsTest.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.connect0(SmbFile.java:880) 在 jcifs.smb.SmbFile.open0(SmbFile.java:972) 在 jcifs.smb.SmbFile.open(SmbFile.java:1006) 在 jcifs.smb.SmbFileInputStream.(SmbFileInputStream.java:73) 在 jcifs.smb.SmbFileInputStream.(SmbFileInputStream.java:65) 在 jcifs.smb.SmbFile.getInputStream(SmbFile.java:2844) 在 org.apache.commons.vfs2.provider.url.UrlFileObject.doGetType(UrlFileObject.java:89) 在 org.apache.commons.vfs2.provider.AbstractFileObject.getType(AbstractFileObject.java:496)
据我了解,相关部分是:登录失败:帐户当前被禁用。
尽管我的用户/密码/域很好,而且我正在做的正是 VFS 文档页面中定义的事情。
我错过了什么?
【问题讨论】:
-
问题已解决。我错过了 VFS 沙盒 jar
-
我遇到了同样的问题。当我包含 VFS 沙箱 2.1-SNAPSHOT 时,我现在得到了一个不同的异常。请看stackoverflow.com/questions/27779254/…
-
jcifs.Config.registerSmbURLHandler();看起来不对。它似乎使用 URL 处理程序而不是 jcifs 提供程序。可以在getManager()后面加System.out.println("prov? " + fs.hasProvider("smb"));吗? -
使用commons-vfs-sandbox-2.1-SNAPSHOT System.out.println(fs.hasProvider("smb"));打印真实。似乎正确的提供程序已成功加载。
标签: java apache smb jcifs apache-commons-vfs