BetaHache

2007/06/20

Utilizar Java para copiar ficheros desde un iSeries a un Windows

Filed under: iSeries,Java — Antonio @ 20:52

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------------------------------------

No hay comentarios

Aún no hay comentarios.

RSS feed para los comentarios de esta entrada. TrackBack URL

Lo siento, el formulario de comentarios está cerrado en este momento.

Powered by WordPress