Saludos, para empezar no se si puse correctamente el titulo de este post con lo quiero explicar =D, lo que quería hacer era mandar crear un archivo en una maquina remota por FTP con un contenido generado dinámicamente sin tener un archivo local, aja, lo que tenia era un StringBuffer con un contenido que fui armando de manera dinámica, y por restricciones en el servidor (esto lo ocupe para un desarrollo web) no podía generar el archivo de manera local, lo que la mayoría de los ejemplos que había encontrado requerían, así que después de googlear un rato me decidí a ocupar el Jakarta Commons Net el cual requiere de Jakarta Oro para funcionar.
Para Ejecutar la clase se requiere tener estos jars:
• jakarta-oro-2.0.8.jar
• commons-net.2.0.jar
• commons-net-ftp-2.0.jar (este no estoy seguro que sea necesario, pero lo puse =P)
Una vez con los jars adecuados les dejo la clase para su uso:
Solamente hay que generar los getters y setters de las variables y en el main esta el ejemplo de cómo usarla.
Suerte!!
Para Ejecutar la clase se requiere tener estos jars:
• jakarta-oro-2.0.8.jar
• commons-net.2.0.jar
• commons-net-ftp-2.0.jar (este no estoy seguro que sea necesario, pero lo puse =P)
Una vez con los jars adecuados les dejo la clase para su uso:
package com.test;
import java.io.ByteArrayInputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
public class TestFTP {
public static void main(String [] args) {
System.out.println("-------- main ---------");
TestFTP ftpTest = new TestFTP();
try {
ftpTest.setFtpHost("XXX.XXX.XXX.XXX"); // IP del Servidor Remote
ftpTest.setFtpUser("ftpUser"); // Usuario FTP
ftpTest.setFtpPassword("ftpPWD"); // Password Usuario
ftpTest.setFtpRemotePath(""); // Path del directorio, si no hay nada se deja en raiz.
ftpTest.setFtpRemoteFileName("Test.txt"); // Nombre del archivo Remoto
if( !ftpTest.connect() ) {
System.err.println("No se logro la conexion =(");
} else {
StringBuffer strBuff = new StringBuffer("");
strBuff.append("Este es en contenido de Prueba");
strBuff.append("\n");
strBuff.append("=D");
boolean okC = ftpTest.send(strBuff);
if( !okC ) {
System.err.println("No se logro enviar el archivo =(");
} else {
System.out.println("El archivo fue enviado =D.");
}
}
System.out.println("-------- FIN ----------");
} catch( Exception e) {
e.printStackTrace();
} finally {
ftpTest.disconnect();
}
}
private String ftpHost;
private String ftpUser;
private String ftpPassword;
private String ftpRemotePath;
private String ftpRemoteFileName;
private FTPClient ftpClient;
public boolean send(StringBuffer strBuff) {
boolean ok = false;
try {
//ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileType(FTP.ASCII_FILE_TYPE);
// Cambiando el Directorio en caso de que exista
if (ftpRemotePath != null && ftpRemotePath.trim().length() > 0) {
System.out.println("Changing to FTP remote dir: " + ftpRemotePath);
ftpClient.changeWorkingDirectory(ftpRemotePath);
int reply = ftpClient.getReplyCode();
if( !FTPReply.isPositiveCompletion(reply) ) {
System.out.println("Unable to change working directory to:" + ftpRemotePath);
ok = false;
} else {
ok = true;
}
} else {
ok = true;
}
// Enviando Archivo
if (ok) {
ByteArrayInputStream iStream = new ByteArrayInputStream( strBuff.toString().getBytes());
System.out.println("Storing file as remote filename: " + this.ftpRemoteFileName);
ok = ftpClient.storeFile(this.ftpRemoteFileName, iStream);
}
} catch(Exception e) {
e.printStackTrace();
}
return ok;
}
public boolean connect() {
boolean ok = false;
try {
ftpClient = new FTPClient();
// Connect FTP
ftpClient.connect(ftpHost);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
this.disconnect();
ok = false;
} else {
System.out.println("Connected to " + ftpHost + ". "+ ftpClient.getReplyString());
// Login FTP
boolean okC = ftpClient.login(this.ftpUser, this.ftpPassword);
if( !okC ) {
System.out.println("Unable to login to FTP server");
this.disconnect();
this.ftpClient = null;
ok = false;
} else {
System.out.println("Server Login OK.");
System.out.println("Remote system is " + ftpClient.getSystemName());
ok = true;
}
}
} catch( Exception e) {
e.printStackTrace();
this.disconnect();
this.ftpClient = null;
ok = false;
}
return ok;
}
public void disconnect() {
try {
System.out.println("FTP Disconnect");
if( this.ftpClient != null ) {
ftpClient.disconnect();
ftpClient = null;
}
} catch (Exception e) {
e.printStackTrace();
}
}
-- Getters & Setters --
}
Solamente hay que generar los getters y setters de las variables y en el main esta el ejemplo de cómo usarla.
Suerte!!

0 comentarios:
Publicar un comentario