Write and read to a samba shared directory using java (JCIFS)

Challenge of the day: publish a file to a microsoft shared directory and then re-read it.

Windows OSes rely on the SAMBA protocol to share files and directories. Thanks to the JCIFS project( http://jcifs.samba.org/), an open source library, we can access theses kind of shares via java.

Under linux, we could have performed it a the shell level using the SMBclient command line utility.

The example is pretty self explanatory, just remember to add jcifs-1.2.25.jar to your classpath and to adapt the authentication parameters to your real login in the url.

import jcifs.smb.*;
public class SMBClient {
  public static void main(String[] args) {
    try{
      // jcifs.Config.setProperty( "jcifs.netbios.wins", "192.168.1.220" );
      //smb://[[[domain;]username[:password]@]server[:port]/[[share/[dir/]file]][?[param=value[param2=value2[...]]]
      String url="smb://domain;user_name:user_password@server_name/directory/test_file.txt";
      String content="hello !";
      SmbFileOutputStream out = new SmbFileOutputStream(url);
      out.write(content.getBytes());
 
      System.out.println("File written, now trying to re-read it:");
      SmbFileInputStream in = new SmbFileInputStream(url);
      byte[] b = new byte[10000];
      int n;
      while(( n = in.read( b )) > 0 ) {
        System.out.write( b, 0, n );
      }
    }catch(Exception e){
  System.out.println(e);
  }
 }
}

Thanks to Cyril for the challenge 🙂 and to the forums of developpez.net (in french) for an example.

3 thoughts on “Write and read to a samba shared directory using java (JCIFS)”

  1. I am currently trying to use your code here, which was already quite useful to me, although I don’t see what the following lines do:

    while(( n = in.read( b )) > 0 ) {
    System.out.write( b, 0, n );
    }

    what exactly is meant by &gt?

  2. Sorry to reply so late, Christian, I missed your comment.

    The symbol you noticed is a typo, is should be read as “greater than”. Thank to you, I edited the code.

    This condition is there to ensure that there are still bytes to read in the buffer.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.