用Java读取远程文件

时间:2016-03-25 17:28:28

标签: java macos uri smb

OS:macbook

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

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

    File
  2. 我从此链接access to file using Java with Samba JCIFS找到了Macbook的库, Samba JCIFS 。这是我的代码:

    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());
    }
    
  3. 然后我收到了这个错误:
    线程“main”中的异常jcifs.smb.SmbAuthException:登录失败:未知的用户名或密码错误。
    用户名与我在终端中运行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()); } 相同,密码是我的登录密码。我不知道为什么我的用户名或密码错误 谢谢你们的帮助。

2 个答案:

答案 0 :(得分:0)

File不能用于读取"远程文件"。它用于文件系统对象,这些对象只对机器是本地的,或者更精确,可以从本地文件系统访问。

在Unix系统中,您可以将挂载点安装到远程文件系统,例如NFS挂载或FUSE挂载。但那些将永远被视为"本地"。

如果你想要的是访问远程资源以被视为"文件",那么File就无法做到。

但JSR 203可以。有关示例,请参阅here

因此,您首先需要定义"远程文件"的含义。这完全取决于您使用的协议。并File无法做到。除非操作系统为您排序(即,如上所述,您有NFS挂载,FUSE挂载或其他)。

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

答案 1 :(得分:0)

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

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

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