What is the recommended way of accessing a network share folder (located in Windows or Linux) in java

Joe.wang picture Joe.wang · May 28, 2015 · Viewed 14.6k times · Source

All, Forgive me I am not familiar with the Linux. I am trying to read all the files of a network share folder which is located in either Windows or Linux system.

Currently I just made it work for the case of Windows by below code.

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

But When I deploy my application to the Linux system and run it. It just told me can not get any files from the specified networkShareFolder;

So I tried to type the path \\10.50.90.18 in the File explorer of Linux like what I did in the windows. To see if the path can be reached from the Linux system. But it just told me Can't locate the \\10.50.90.18. But I am sure the IP can be ping from the Linux.

So my questions are

  1. Why \\10.50.90.18 can't be accessed in Linux .But can be accessed in Windows. (I am sure their IP are all 10.50.90.*)
  2. What is the best way to access the network share folder from windows or linux ?

Thanks.

Answer

Elliott Frisch picture Elliott Frisch · May 28, 2015

Remote Mount with FUSE

It's possible to mount a remote filesystem (generally including SMB/CIFS) with FUSE and samba. That might look something like (assuming you have a mountpoint /windows)

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

Then you could access your directory (transparently) with

new File("/windows/ITS Tool/xml")

Pure Java Solution (with JCIFS)

JCIFS provides SmbFile and that provides listFiles() allowing something like

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

The linked documentation for SmbFile does give the full format as

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

and it also notes that all SMB URLs that represent workgroups, servers, shares, or directories require a trailing slash '/'.