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------------------------------------
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
Totalmente de acuerdo
Comentario por admin — 2007/08/08 @ 22:03
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
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