【问题标题】:What is the recommended way of accessing a network share folder (located in Windows or Linux) in java在 java 中访问网络共享文件夹(位于 Windows 或 Linux)的推荐方法是什么
【发布时间】:2023-03-06 14:42:02
【问题描述】:

所有,请原谅我对 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();

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

所以我尝试在 Linux 的文件资源管理器中键入路径 \\10.50.90.18,就像我在 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 访问网络共享文件夹的最佳方法是什么?

谢谢。

【问题讨论】:

  • 你能从 Linux 机器上 ping 10.50.90.18 吗?你有安装 samba 吗?
  • 我相信 Linux 不允许你像那样直接访问 UNC。您可以像本地目录一样挂载该路径并访问,或者如果您不喜欢挂载它,可以使用 smbclient。或者更便携的方式,使用普通的 Java SMB 客户端(例如 JCIFS?)来访问,这样您就不需要依赖特定于操作系统的功能
  • @ElliottFrisch 是的,我可以 ping 通 IP。桑巴?我不确定。如何验证呢?谢谢。
  • SMB 简而言之就是协议名称。 Samba 是 Linux 上使用不同实用程序实现 SMB 的产品
  • @AdrianShum 啊哈。好的 。好好解释。 :)

标签: java linux suse


【解决方案1】:

带 FUSE 的远程安装

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

# export USER=efrisch
# export WORKGRP=mygrp
# smbmount //10.50.90.18/ /windows –o username=$USER,workgroup=$WORKGRP

然后您可以使用

(透明地)访问您的目录
new File("/windows/ITS Tool/xml")

纯 Java 解决方案(使用 JCIFS)

JCIFS 提供 SmbFile 并提供 listFiles() 允许类似

SmbFile[] files = new SmbFile("smb://10.50.90.18/ITS Tool/xml/").listFiles();

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

smb://[[[domain;]username[:password]@]server[:port]/[[share/[dir/]file]]][?param=value[param2=value2[.. .]]]

它还指出,所有代表工作组、服务器、共享或目录的 SMB URL 都需要尾部斜杠“/”。

【讨论】:

  • 不错。听起来我有两种选择。好吧 。我认为我需要根据您的回答.em 进行更多研究。这是开始的好点。谢谢。
  • 对不起。我不知道为什么,我无法在我的 Linux 中访问路径 smb://10.50.90.18(alt+f2 运行窗口)。与Java无关。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
相关资源
最近更新 更多