miércoles, diciembre 14, 2011

java.net.SocketException: Software caused connection abort: socket write error

JAVA: Utilizando la librería "org.apache.commons.net.ftp", encontré que al listar los archivos del servidor FTP se generaba el siguiente error:
 java.net.SocketException: Software caused connection abort: socket write error
Opté por cambiar de manejador de FTP y utilicé  la librería "ftp4j", con los mismos resultados.
De tal forma que pensé que el problema podía ser el servidor de FTP que he estado utilizando "Filezilla FTP Server" y lo cambie por otro, pero el error persistía, así que después de mucho investigar caí en cuenta que el error se encontraba en la versión de JDK que estaba utilizando (actualmente JDK 1.7), compile mi código con la versión JDK 1.6 y funciono de maravilla.
Conclusión: El JDK 1.7 tiene un bug en el manejo de sockets, por el momento será mejor utilizar el JDK 1.6 que parece ser una versión estable.

El código fuente utilizado para esta prueba fue:

package ftpTest;

import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;


public class FtpEjemplo {

    public static void main(String[] args) {
        FTPClient f = new FTPClient();
        try {
            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX); //Este objeto nos
            f.configure(conf); //permite configurar opciones de conexion como idioma y sistema de archivos
            f.connect("192.168.10.1"); // ip del servidor ftp
            f.login("username", "password"); // usuario y password para conectarnos al ftp
            f.changeWorkingDirectory("/"); // Cambiamos de la raiz al subdirectorio uno
            FTPFile[] files = f.listFiles("/"); // Obtiene los archivos del servidor y los mostramos
            System.out.println(f.isConnected());
            for (FTPFile arch : files) {
                System.out.println(arch.toString());
            }
            f.disconnect();
            System.out.println(f.isConnected());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}






jueves, octubre 27, 2011

java leer archivo




Este es el codigo de un sencillo lector de archivos en java.





--> Lector.java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

/**
 *
 * @author ing. Oscar Hurtado Morato
 */
public class Lector {

    //Charset "UTF-8","ISO-8859-1","latin1"
    private String line = "";
    //protected String fullPath;
    private BufferedReader br;
    //protected String chSet;
    private InputStreamReader str;

    public void instanciaArchivoAleerse(String fullPath, String charSet) throws FileNotFoundException {
        str = new InputStreamReader(new FileInputStream(fullPath), Charset.forName(charSet));
        br = new BufferedReader(str);
    }

    public String getLine() {
        return line;
    }

    public boolean readNextLine() {
        boolean ret = true;
        try {
            line = br.readLine();
            if (line == null) {
                ret = false;
            }
        } catch (IOException ex) {
            ret = false;
        }
        return ret;
    }
}




--------------------------------------------------------

LectorTest.java



import java.io.FileNotFoundException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Ing. Oscar Hurtado Morato
 */
public class LectorTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        LectorTest lector = new LectorTest();
        lector.test();
    }

    private void test() {
        try {
            Lector lec = new Lector();
            String fullPath = "";
            String charset = "";
            fullPath = "d:/example.txt";
            charset = "latin1";
            lec.instanciaArchivoAleerse(fullPath, charset);
            String linea = "";
            while (lec.readNextLine()) {
                linea = lec.getLine();
                System.out.println(linea);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(LectorTest.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}





viernes, septiembre 30, 2011

[Java] Java This ejemplo

Este es un ejemplo en JAVA que muestra el uso basico de 'this'.

En este se ejemplifica como diferenciar entre una variable de clase y una variable de metodo  que tengan el mismo nombre entre si, mediante 'this'.

_______________________________________________

public class Ejemplo {

    //se define una variable de CLASE llamada 'numero'
    private String numero = "uno";

    public static void main(String args[]) {
        Ejemplo ej = new Ejemplo();
        ej.resultado();
    }

    public void resultado() {


        //se define una variable local llamada 'numero'
        String numero="dos";
      
        //¿como se distingue entre la variable 'numero' de clase
        //y la variable 'numero' propia de la funcion?
              
        //sin this
        //=> Se refiere a la variable declarada en la funcion
        System.out.println("numero=" + numero+" => muestra la variable declarada en el metodo");
           
        //con this
        //=> Se refiere a la variable declarada en la clase
        System.out.println("numero=" + this.numero+" => muestra la variable declarada en la clase");

    }
}

---------------------------------

La salida de este programa es la siguiente:

run:

numero=dos => muestra la variable declarada en el metodo

numero=uno => muestra la variable declarada en la clase

BUILD SUCCESSFUL (total time: 0 seconds)

Saludos...

jueves, septiembre 29, 2011

[Java] Downloader Codigo

Este pedazo de codigo en Java , como su nombre lo indica es un 'Downloader', que sirve para bajar un fichero determinado de algun lugar de la red.

Sus usos se limitan a la imaginacion del programador..
Saludos y espero que les sea util.



____________________________________________________________________________

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Java Downloader
 * @author Oscar Hurtado Morato.
 */

public class Downloader {

    /*
     * Ejemplo:
     * Leera de la direccion (ficticia)
     * http://www.asdhgf.com/javaPic.jpg
     * el jpg con nombre javaPic, el grafico
     * sera guardado (con el mismo nombre)
     * dentro el directorio local 'd:/TEMPORAL'
     */
   
    public static void main(String args[]) throws IOException {
        Downloader downloader = new Downloader();
        String urlS = "http://www.asdhgf.com/java.jpg";
        String saveDir = "d:/TEMPORAL";
        System.out.println("Bajando fichero de: "+urlS);
        downloader.download(urlS, saveDir);
        System.out.println("Download completo....");
       
    }

    public void download(String urlS, String saveDir) throws IOException {

        //obtiene el nombre del archivo y lo agrega al directorio de salida
        int lastIndex = urlS.lastIndexOf("/");
        String archName = urlS.substring(lastIndex);
        String savePath = saveDir + archName;
        // downloader
        BufferedInputStream bins = new BufferedInputStream(new java.net.URL(urlS).openStream());
        FileOutputStream fouts = new FileOutputStream(savePath);
        BufferedOutputStream bouts = new BufferedOutputStream(fouts, 1024);
        byte[] data = new byte[1024];
        int bte = 0;
        while ((bte = bins.read(data, 0, 1024)) >= 0) {
            bouts.write(data, 0, bte);
        }
        bouts.close();
        bins.close();
        System.out.println("fichero '"+archName+"' colocado en carpeta "+saveDir);
    }
}

miércoles, marzo 16, 2011

[Java] Fecha y hora con zona horaria

Si no se logra obtener la hora correcta con Java, es posible que no se haya tomado en cuenta el seteo de la zona horaria.
Si ese fuese el caso, utilizar el código siguiente:

-Obtiene la fecha, hora y la formatea para una determinada zona horaria-

____________________________________________________________________________

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

/**
*
* @author Ing.Oscar Hurtado
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Main orq = new Main();
String dte=orq.getDateTime();
System.out.println(dte);

}
public String getDateTime() {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
//Para ver que IDS estan disponibles, descomentar lo siguiente
/*
String[] avail = TimeZone.getAvailableIDs();
for (int c = 0; c < avail.length; c++) {
System.out.println(avail[c]);
}
*/


//se setea el ID correspondiente a la zona, en este caso para 'La Paz Bolivia'
TimeZone est = TimeZone.getTimeZone("America/La_Paz");
dateFormat.setTimeZone(est);
Date date = new Date();
return dateFormat.format(date);
}
}


miércoles, abril 08, 2009

[Java] Convertir de objeto a string


Aqui se muestra como realizar la conversion de un objeto a string y un arreglo de objetos (object array) a un arreglo de strings (String array).




____________________________________________________________________________


import java.util.Arrays;

/**
 *
 * @author Ing. Oscar Hurtado Morato
 */
public class ConvierteEjemplo {

    public static void main(String args[]) {
        ConvierteEjemplo ej = new ConvierteEjemplo();
        ej.ejemplo();
    }

    public void ejemplo() {
       
//
        //primer ejemplo simple
        Object o = "hola";
        String str = objectToString(o);
        System.out.println("objeto a string=" + str);
       
//
        //otro ejemplo con array
        Object[] obs = new Object[3];
        obs[0] = "a";
        obs[1] = "b";
        obs[2] = "c";
        //muestra el convertido
        String[] strA = objectToArray(obs);
        for (int c = 0; c < 3; c++) {
            System.out.println(strA[c]);
        }

    }

    public String objectToString(Object o) {
        String st;
        st = (String) o;
        return st;
    }

    public String[] objectToArray(Object[] objArray) {
        String[] strArray = Arrays.copyOf(objArray, objArray.length, String[].class);
        return strArray;
    }
}

lunes, septiembre 01, 2008

Error - could not find file 'c018i.o'.

Error - could not find file 'c018i.o'. (Solucionado)

Entorno: Mplab IDE v8.10 
Error: "Error - could not find file 'c018i.o'."
Este error se genera por que no se adjuntó la dirección en donde se encuentran las librerias, entonces la solución será como sigue:
project -> build options -> project -> directories ->library search path -> new
Agregar el directorio:
c:/MCC18/lib
Espero y sirva la referencia, (pues tuve que fungir de adivino para encontrar la solución de este asunto).


java.net.SocketException: Software caused connection abort: socket write error

JAVA : Utilizando la librería " org.apache.commons.net.ftp ", encontré que al listar los archivos del servidor FTP se generaba...