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.
Thanks for this info !
It could be usefull !
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 >?
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.