如何将 JCIFS 与 apache VFS 结合使用来访问 SMB URL?

2023-11-25

我正在尝试使用 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());
}

我收到异常:

线程“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 文档页面中定义的操作。

我缺少什么?


我想我知道你的问题是什么,沙箱提供程序在 2.0 中不会自动注册。而且您还需要在解析调用中实际使用配置的身份验证属性(请参阅下面的修改源)。

我通常不使用默认的文件系统管理器,而是动态注册我的提供程序,但如果您想使用自动检测,则需要将 vfs-providers.xml 添加到沙箱 JAR。

这是使用 2.0 构建完整的工作 JAR 的方法:

> git clone https://github.com/apache/commons-vfs.git -b commons-vfs2-project-2.0 vfs2.0
> cd vfs2.0
> notepad sandbox\pom.xml
> notepad sandbox\src\test\java\org\apache\commons\vfs2\provider\smb\test\StandaloneMain.java
> mvn -Pinclude-sandbox -DskipTests=true clean package dependency:tree

编辑 sandbox/pom.xml 时,需要确保从 标记中删除 -SANDBOX。然后你需要添加:

  <resource>
    <directory>src/main/resources</directory>
  </resource>

到已经存在的 标签(紧接在第一个 LICENSE+NOTICE 之后,包括第 88 行)

这是使用的测试代码:

package org.apache.commons.vfs2.provider.smb.test;

import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemException;
import org.apache.commons.vfs2.FileSystemManager;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.VFS;
import org.apache.commons.vfs2.auth.StaticUserAuthenticator;
import org.apache.commons.vfs2.impl.DefaultFileSystemConfigBuilder;


public class StandaloneMain
{
    public static void main(String[] args) throws FileSystemException {
        //jcifs.Config.registerSmbURLHandler();
        StaticUserAuthenticator auth = 
              new StaticUserAuthenticator("DOMAIN", "user", "SECRET");
        FileSystemOptions opts = new FileSystemOptions();
        DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts, auth);
        FileSystemManager fs = VFS.getManager();
        if (!fs.hasProvider("smb")) throw new RuntimeException("Provider missing");
        System.out.println("Connecting " + args[0] + " with " + opts);
        FileObject smbFile = fs.resolveFile(args[0], opts); // added opts!
        System.out.println(smbFile.exists() + " " + smbFile.getContent().getLastModifiedTime());
    }
}

这是执行过程:

> set REP=C:\Users\USERNAME\.m2\repository
> java -cp sandbox\target\commons-vfs2-sandbox-2.0.jar;^
           core\target\commons-vfs2-2.0.jar;^
           %REP%\commons-logging\commons-logging\1.1.1\commons-logging-1.1.1.jar;^
           %REP%\jcifs\jcifs\0.8.3\jcifs-0.8.3.jar;^
           sandbox\target\test-classes
       org.apache.commons.vfs2.provider.smb.test.StandaloneMain smb://HOST/Users
Jan 05, 2015 2:40:19 PM org.apache.commons.vfs2.VfsLog info
INFORMATION: Using "C:\Users\USERNAME\AppData\Local\Temp\vfs_cache" as temporary files store.
Connecting smb://eckenfels02/Users with org.apache.commons.vfs2.FileSystemOptions@27dd2ec5
true 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 JCIFS 与 apache VFS 结合使用来访问 SMB URL? 的相关文章

  • Java - 如何将特殊字符放入字符串中

    Java 似乎有很好的字符串处理能力 尽管如此 我还是遇到了最简单的问题 我需要动态字符串 它们在运行时更改 因此字符串类型不是一个好的选择 因为它们是不可变的 所以我使用字符数组 设置起来有点痛苦 但至少它们是可以修改的 我想创建一个字符
  • Hashmap并发问题

    我有一个哈希图 出于速度原因 我希望不需要锁定 假设我不介意过时的数据 同时更新它和访问它会导致任何问题吗 我的访问是获取 而不是迭代 删除是更新的一部分 是的 这会导致重大问题 一个例子是向散列映射添加值时可能发生的情况 这可能会导致表重
  • 位图内存不足错误

    我对这个错误有疑问 我从 URL 制作网站图标解析器 我这样做是这样的 public class GrabIconsFromWebPage public static String replaceUrl String url StringB
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • MongoTemplate upsert - 从 pojo 进行更新的简单方法(哪个用户已编辑)?

    这是一个简单的 pojo public class Description private String code private String name private String norwegian private String en
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • 如何开始使用 Chainsaw for Log4j?

    我想开始使用 Chainsaw v2 几乎没有关于它的信息 我只找到了this http www velocityreviews com forums t140105 help using chainsaw for log4j html 但
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • 如何比较 Struts 2 中 url 请求参数中的单个字符

    我正在读取具有单个字符的 url 参数 它将是Y or N 我必须写一个条件来检查它是否Y or N并做相应的事情 这是我写的 但似乎不起作用 总是转到其他地方 网址是
  • 尝试使用 JRI 将 R 与我的 Java 应用程序集成,但出现错误。谁能解释一下原因和解决办法吗?

    我需要将 Java 与 R 集成来运行一些数学命令并使用 R 的功能进行绘图 以下部分代码给出了错误 public static void main String args HelloRWorld r new HelloRWorld r h
  • java.lang.LinkageError:尝试重复的类定义

    为什么会发生错误以及如何修复它 02 13 02 pool 4 thread 2 WARN Exception in thread pool 4 thread 2 02 13 02 pool 4 thread 2 WARN java lan
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • Java:java.util.ConcurrentModificationException

    我正在制作 2D 目前正在研究用子弹射击 子弹是一个单独的类 所有项目符号都存储在称为项目符号的数组列表中 当它超出屏幕一侧 Exception in thread main java util ConcurrentModification
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 为什么我的代码会产生错误:该语句没有返回结果集[重复]

    这个问题在这里已经有答案了 我正在从 Microsoft SQL Server Studio 执行以下查询 该查询工作正常并显示结果 SELECT INTO temp table FROM md criteria join WHERE us
  • 公共方法与公共 API

    在干净的代码书中 有一个观点是 公共 API 中的 Javadocs 同样 Effective java 一书也有这样的内容 项目 56 为所有公开的 API 元素编写文档注释 所以这就是我的问题 所有公共方法都被视为公共 API 吗 它们
  • 用于网络服务器日志分析的软件? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我可以得到一些关于 Apache 2 2 访问日志文件的优秀日志分析软件的建议 最好有一些理由 吗 我听说过韦巴利泽 http www w
  • 失败时石英重试

    假设我有一个这样配置的触发器
  • 如何在不同版本的Google App Engine中使用自定义域名?

    我使用谷歌应用程序引擎作为我的 Android 和 Web 应用程序的服务器 我使用 Android Studio 开发了 Android 应用程序 并使用 Eclipse 开发了 Web 应用程序 我在应用程序引擎中部署了两个版本 第一个

随机推荐

  • 将 JSON 显示为 HTML [关闭]

    Closed 这个问题是无关 目前不接受答案 关于如何将 JSON 嵌入到 HTML 页面中 并将 JSON 格式化为人类可读的样式 有什么建议吗 例如 当您在浏览器中查看 XML 时 大多数浏览器都会显示 XML 格式 缩进 正确的换行符
  • jquery如何做一个翻转效果?

    我试图模仿通常在移动设备上发现的效果 在移动设备上有一个面板 当您单击按钮时 它会旋转 而在另一侧它有一些其他信息 我发现了一些使用 css 转换的代码这是一个例子 the js signup on click function e e p
  • Perl6:获取 Perl5 模块的数组引用

    我正在尝试使用 Excel Writer XLSX 在 Perl6 中编写 Excel 笔记本 我正在使用 Inline Perl5 通过use Excel Writer XLSX from
  • Xcode 6 不显示 iOS 7.1 模拟器

    我在 Mac OS X 10 9 5 上拥有 Xcode 版本 6 0 1 6A317 以及所有 iOS 8 模拟器 我还下载了 iOS 7 1 模拟器 我正在开发一个适用于 iOS 8 和 iOS 7 的应用程序 我遇到的问题是 Xcod
  • Python copy.deepcopy() 函数无法正常工作[重复]

    这个问题在这里已经有答案了 我一直在使用深度复制功能和复制功能 并且我对它们都遇到了同样的问题 这就像副本是引用 或指针 而不是正确的副本 我正在Python中处理数据记录 类 也许可能是这样 我给你看一个例子 gt gt gt impor
  • 如何使用 ggplot2 从 qcc 包重现 pareto.chart 图?

    我一直在使用 R 中 qcc 包中的 pareto chart 函数 我真的很喜欢它 现在我想移植所有图形以使用 ggplot2 包 然而 尽管有出色的文档 但我对 ggplot2 的了解非常有限 因此我无法弄清楚所有细节 基本上我想要一个
  • 如何生成 a[i] != i 的排列?

    假设我有一个整数数组int a 0 1 N 1 where N的大小是a 现在我需要生成所有排列a s that a i i对全部0 lt i lt N 你会怎么做 下面是一些 C 实现的算法 该算法基于递归的双射证明 n n 1 n 1
  • Android 通用用户代理 (UA)

    我正在构建一个 Android 应用程序来显示来自服务器的内容源 服务器是一个移动网站 例如http m google com 它跟踪来自各种移动客户端的流量 为了区分 Android 客户端 如何为我的应用程序提供通用字符串 这就是我问这
  • 是否可以在索引视图中使用 LabelFor 作为标题行

    我正在尝试在 ASP NET MVC 索引视图中利用 DataAnnotation 值 有趣的是 代码生成器使用字段名称 例如 BlogPost 而不是Html LabelFor m gt Model ColumNames BlogPost
  • java中整数线程递增是安全的吗?

    Java代码 public class IncreaseTest public static int value 0 public synchronized int increment return value 是方法increment 线
  • 如何从 Java 代码中编写乐观锁和悲观锁

    我知道什么是乐观锁和悲观锁 但是当你编写java代码时你会怎么做呢 假设我将 Oracle 与 Java 结合使用 JDBC 中是否有任何方法可以帮助我做到这一点 我将如何配置这个东西 任何指示将不胜感激 您可以通过这种方式在数据库表中实现
  • 如果文件名为 _ViewStart.cshtml,Razor 布局将不起作用

    我有一个 MVC3 Web 应用程序 我想开始使用整个 Razor 视图 该网站的大部分内容都可以与 Site Master 配合使用 因此我已将其大部分内容打包到部分视图中 并尝试添加具有相同内容的布局 阅读 Scott Gu 的博客后
  • 如何在运行时轻松地在 PyQt 或 PySide 之间进行选择?

    我想在一个源文件 QT py 中执行类似的操作 import sys import PyQt4 sys modules Qt PyQt4 然后将此文件导入到其他源文件中 并像这样使用它 import QT from Qt QtCore im
  • 没有外部“C”的动态加载

    我想一般使用 libdl 动态加载 C 问题是在运行时识别名称已被破坏的符号 如此处所述 一种解决方案是使用 extern C 删除名称修饰 http www tldp org HOWTO C dlopen theproblem html
  • 编辑模式下的自定义 UITableViewCell 不会移动我的 UILabels

    这让我很头疼 我有一个功能齐全的 CoreData PopulatedUITableView里面一个UIViewController我已经成功实现了 滑动删除选项 这很容易 我还可以使用出现红色圆圈的编辑按钮删除单个实例 我的问题是 我认为
  • CryptoJS AES 加密和 Java AES 解密

    我之所以问这个问题 是因为我这两天读了很多关于加密 AES 加密的文章 就在我以为我明白了的时候 我意识到我根本没有明白 这篇文章是与我的问题最接近的一篇 我有完全相同的问题 但尚未得到解答 CryptoJS AES 加密与 JAVA AE
  • 在 ASP.NET MVC Core 中显示/编辑货币,为什么这么复杂?

    在 ASP NET Core 2 0 应用程序中 我有一个Foo与 一起上课a lot经典字符串或数字成员以及int Budget field using Microsoft AspNetCore Http using System usi
  • jQuery-File-Upload 在 Internet Explorer (IE9) 中未触发完成回调

    我检查了有关同一问题的一些问题 blueimp jquery 文件上传 完成 完成 回调不适用于 IE 9 但即使将我的 Content Type 设置为 text html 作为响应 done 回调也不会被触发 另外 正如 jQuery
  • 在 Python 中嵌入 Matplotlib 动画(谷歌 colab 笔记本)

    我正在尝试在 google 的 colab research 中显示 gif 文件 我能够将文件保存在具有以下路径名的目录中 content BrowniamMotion gif但我不知道如何在我的笔记本中显示这个 GIF 来呈现 到目前为
  • 如何将 JCIFS 与 apache VFS 结合使用来访问 SMB URL?

    我正在尝试使用 smb URL 访问本地计算机上的文件夹 我的项目正在使用 jar commons vfs2 2 0 jar 和 jcifs 1 3 17 jar 以及所有其他所需的 jar 完整的代码是 public static voi