当前位置: 首页 > 知识库问答 >
问题:

如何在apache VFS中使用JCIFS访问SMB URL?

狄冥夜
2023-03-14

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

我收到例外情况:

共有1个答案

公冶光亮
2023-03-14

我想我知道你的问题是什么,沙箱提供商在2.0中不是自动注册的。此外,您还需要在resolve调用中实际使用已配置的身份验证属性(请参见下面修改的源代码)。

我通常不使用默认的文件系统管理器,而是动态注册我的提供者,但是如果您想使用自动检测,您需要将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
  <resource>
    <directory>src/main/resources</directory>
  </resource>
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
 类似资料:
  • 问题内容: 我有一个关于使用Samba JCIFS访问文件的问题。因此,有一个我要访问的服务器,我们将其称为server.unv.edu,工作组为WKGRP。此服务器中有一个共享:\\ server.unv.edu \ pcb $ 我尝试访问服务器的方式是: 和 但这不起作用。我得到了一个错误 任何人都可以给我建议或代码的正确性,以帮助我访问文件吗? 非常感谢。 问题答案: 您正在使它比应有的难度

  • 我正在编写一个android应用程序来使用JCIFS samba库访问windows共享,但是我收到新SmbFile(path,auth)上的

  • 我正在使用JCIFS写入windows共享。这一直很有效。它突然停止工作,现在得到一个jcifs.smb.smbauthException:访问被拒绝。例外。我知道我的凭据很好,因为我可以使用smb手动连接并写入文件夹,所以这不是问题。我使用的代码是: 它在“SmbFileOutputStream outputStream=new SmbFileOutputStream(file)”行上爆炸。几个

  • 这表明Docker postgresql(正在运行)在该端口不可用。我尝试将添加到我的中,但没有成功。有什么提示吗?

  • 所以我试着从android设备写一个文件到windows共享文件夹。我使用的是最新版本的JCIFS和代码,显示可用的网络共享工作良好。所以我假设JCIFS和我的LAN、WiFi等都没问题。这里是文件上传的代码(实际上我只想写一个文本到文件中): 因为url是记录的,所以我确信它是正确的(我也使用上面提到的代码检查了url,它会浏览文件夹的包含)。 但问题是Im总是得到相同的: 共享没有密码保护,所

  • 我试图找到以下元素并在其中输入文本。我尝试了许多不同的方法来访问该元素,但总是得到相同的错误。我当前的代码行 生成相同的错误 找不到元素:{“method”:“id”,“selector”:“keyword”} 下面显示的元素显然具有Id“keyword”。 我使用Firebug捕获此元素的完整XPath。 /html/body/div/span/table[3]/tbody/tr/td/tabl