【问题标题】:read remote file in Java用Java读取远程文件
【发布时间】:2016-07-13 11:56:55
【问题描述】:

操作系统:macbook

我想用 Java 读取远程文件。 我先在本地计算机上测试它。

  1. 我尝试使用File,但是你们告诉我File只能在本地文件系统上使用,谢谢。

    public static void main(String[] args) throws URISyntaxException {
        URI uri = new URI("file://127.0.0.1/Users/jian/Public/logfiles/Hadoop/hdp_log1.log");
        File file = new File(uri);
        System.out.println(file.exists());
    }
    
  2. 我从这个链接 access to file using Java with Samba JCIFS 找到了一个 Macbook 库,Samba JCIFS。这是我的代码:

    public static void main(String[] args) throws URISyntaxException, MalformedURLException, SmbException {
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("","jian", "ywnk");
        SmbFile smbFile = new SmbFile("smb://127.0.0.1/Users/jian/Public/logfiles/Hadoop/hdp_log1.log",auth);
        System.out.println(smbFile.exists()); 
    }
    

然后我得到了这个错误:
线程“主”jcifs.smb.SmbAuthException 中的异常:登录失败:未知用户名或密码错误。
用户名与我在终端中运行who am i 相同,密码是我的登录密码。我不知道为什么会收到此用户名或密码错误错误。
谢谢你们的帮助。

【问题讨论】:

  • 这有帮助吗:stackoverflow.com/questions/11724576/…?要处理该文件,您似乎需要将其复制到本地驱动器。
  • 看看this link。它包含有关 uri 权限组件的信息。基本上,hostname:port 构成了权限组件。
  • 我不确定权限组件的确切含义,但听起来可能是权限问题。
  • 这不是用于File 的合法URI。为什么File?这是 2016 年,you should not use File anymore
  • 你可以尝试使用file://localhost/Users/jian/Public/logfiles/Hadoop/hdp_log1.log 还是只使用file:///Users/jian/Public/logfiles/Hadoop/hdp_log1.log

标签: java macos uri smb


【解决方案1】:

一些java FTP库可以轻松满足您的要求。

看看ftp4j,它是一个用于上传和下载文件以及目录列表的好库。

Apache commons-net 也是一个不错的选择。他们也有一些非常好的样本programs

【讨论】:

    【解决方案2】:

    File 不能用于读取“远程文件”。它旨在用于仅在机器本地的文件系统对象,或者更准确地说,可从本地文件系统访问。

    碰巧在 Unix 系统中,您可以将挂载点指向远程文件系统,例如 NFS 挂载或 FUSE 挂载。但这些将始终被视为“本地”。

    如果你想要访问远程资源以被视为“文件”,那么File 做不到。

    但是 JSR 203 可以。示例见here

    因此,您首先需要定义“远程文件”的含义。这完全取决于您使用的协议。而File 做不到。除非操作系统已为您排序(也就是说,如上所述,您有 NFS 挂载、FUSE 挂载或其他)。


    至于您的错误,File 构造函数会警告您,您的 URI 中有权限组件;还有:127.0.0.1。由于 File 只需要 URI 的路径组件(除了 URI 方案,file),这解释了错误。

    【讨论】:

    • 谢谢。远程文件,我的意思是,NFS。我可以用Path 做吗?
    • 你可以,如果有一个 JSR203 实现它......据我所知,没有一个。因此,您最好的办法是在操作系统级别安装它并使用它。请注意,您可以通过查询不同的FileStores 来查看 Java 中的“挂载点”:如果您的 NFS 服务器已挂载,那么您可以将其视为文件存储。见FileSystems.getDefault().getFileStores()
    • 我编辑了我的帖子,你能给我一些新的反馈吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多