BetaHache

2007/06/20

Utilizar Java para copiar ficheros desde un iSeries a un Windows

Archivado en: Java, iSeries — 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------------------------------------

4 comentarios

  1. Hola:

    Java es una alternativa para el problema que planteas, pero no la única solución: En mi opinión tiene sentido de ser si ambas maquinas (AS400 y el servidor de red) están en diferentes dominios y/o los usuarios tienen credenciales diferentes, pero sino es así, es tan sencillo como utilizar un único mandato del sistema operativo de un AS400, como por ejemplo:

    CPY OBJ(”/tmp/prueba.txt”)
    TODIR(”/QNTC/servidor/recurso/directorio/fichero.txt”)

    Salu2

    Comentario por Alex Martínez — 2007/08/07 @ 22:13

  2. Totalmente de acuerdo

    Comentario por admin — 2007/08/08 @ 22:03

  3. Hola como están.
    Que bueno que encuentro esta página, espero que me puedan ayudar en mi dilema. Estoy accesando a una máquina remota dentro de una misma LAN. La máquina tiene una carpeta compartida con seguridad(login y password) con acceso para los usuarios locales de la red, quisiera una forma mediante la librería jcifs, poder loguearme a la carpeta enviando el login y el password mediante código Java.., estuve mirando el código arriba expuesto y entiendo buena parte, pero quisiera saber otra forma para saber si se conecta a la máquina o no y si puede loguear a la carpeta, además de una forma de correr el programa por MyEclipse o NetBeans, gracias…

    Comentario por Jairo Ernesto Sánchez — 2007/12/17 @ 17:16

  4. Hola Jairo, mira la página http://jcifs.samba.org/src/examples/, allí tienes varios ejemplos y quizás encuentres alguno que te pueda ayudar.

    Comentario por Antonio — 2007/12/17 @ 22:02

Suscripción RSS a los comentarios de esta entrada. TrackBack URL

Disculpa, los comentarios están cerrados.

Administrado con WordPress. Traducido por WordPress España.