Hace poco estuve buscando una forma fácil de pasar ficheros desde un AS400 o iSeries a un recurso de red de un servidor Windows.
La solución pasaba por utilizar Java, y estuve buscando alguna librería que tuviera los métodos necesarios para establecer una sesión contra el servidor Windows y poder copiar el fichero.
La librería Java se llama jCifs y es mantenida por el grupo que desarrolla Samba para Linux.
El programita, lo único que hace es leer un fichero local del IFS del iSeries y lo copia a un recurso de la red.
Es código es:
------------------------------------copyFile.java------------------------------------
import jcifs.Config;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;
import java.io.File;
import java.io.FileInputStream;;
public class copyFile {
public static void main( String argv[] ) throws Exception {
if (argv.length != 2)
{
System.out.println("Debe indicar el fichero origen (local) y el fichero destino (recurso red).");
System.out.println("Ejemplo: java copyFile /tmp/prueba.txt smb://servidor/recurso/directorio/fichero.txt.");
System.exit(-1);
}
Config.setProperty( "jcifs.smb.client.domain" , "mi.domi.nio" );
Config.setProperty( "jcifs.smb.client.username", "usuario1 ");
Config.setProperty( "jcifs.smb.client.password", "contraseña1 ");
Config.setProperty( "jcifs.netbios.wins", "xx.xx.xx.xx ");
Config.setProperty( "jcifs.netbios.laddr", "localhost ");
Config.setProperty( "jcifs.smb.client.signingPreferred", "true" );
System.out.println("Copiando fichero ''" + argv[0] + "'' a ''" +argv[1] + "''");
try {
File test = new File(argv[0]);
FileInputStream in = new FileInputStream( test );
if( test.exists() ) {
System.out.println( argv[0] + " exists" );
} else {
System.out.println( argv[0] + " does not exist" );
System.exit(-1);
}
SmbFileOutputStream out = new SmbFileOutputStream(argv[1]);
byte[] buf = new byte[1024 * 16];
int len, total=0;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
total+=len;
}
in.close();
out.close();
System.out.println(total + " bytes copiados.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
------------------------------------copyFile.java------------------------------------