在java中访问网络共享文件夹(位于Windows或Linux中)的推荐方法是什么?

Joe*_*ang 7 java linux suse

全部,原谅我,我不熟悉Linux.我试图读取位于Windows或Linux系统中的网络共享文件夹的所有文件.

目前我只是通过以下代码使其适用于Windows的情况.

networkShareFolder="\\\\10.50.90.18\\ITS Tool\\xml\\";//It is a windows Network share path.
File[] files = new File(networkShareFolder).listFiles();
Run Code Online (Sandbox Code Playgroud)

但是当我将我的应用程序部署到Linux系统并运行它时.它只是告诉我无法从指定的文件中获取任何文件networkShareFolder;

所以我尝试\\10.50.90.18在Linux的File explorer中输入路径,就像我在windows中所做的那样.查看是否可以从Linux系统访问该路径.但它只是告诉我Can't locate the \\10.50.90.18.但我确信IP可以从Linux ping.

所以我的问题是

  1. 为什么\\10.50.90.18无法在Linux中访问.但可以在Windows中访问.(我相信他们的IP都是10.50.90.*)
  2. 从windows或linux访问网络共享文件夹的最佳方法是什么?

谢谢.

Ell*_*sch 12

使用FUSE远程安装

可以使用FUSEsamba安装远程文件系统(通常包括SMB/CIFS).这可能看起来像(假设你有一个挂载点/windows)

# export USER=efrisch
# export WORKGRP=mygrp
# smbmount //10.50.90.18/ /windows –o username=$USER,workgroup=$WORKGRP
Run Code Online (Sandbox Code Playgroud)

然后你可以用(透明地)访问你的目录

new File("/windows/ITS Tool/xml")
Run Code Online (Sandbox Code Playgroud)

纯Java解决方案(使用JCIFS)

JCIFS提供SmbFile并提供listFiles()类似的东西

SmbFile[] files = new SmbFile("smb://10.50.90.18/ITS Tool/xml/").listFiles();
Run Code Online (Sandbox Code Playgroud)

链接文档SmbFile确实给出了完整的格式

SMB://?[[[域]用户名[:密码] @]服务器[:端口]/[[份额/ [DIR /]文件]]] [PARAM =值[参数2 = 2 [...]] ]

它还指出,代表工作组,服务器,共享或目录的所有SMB URL都需要一个斜杠"/".