Archivo de la etiqueta: Java

Leer la última linea de un fichero con Java

[programación]

Tras buscar un poco por internet, parece que no hay una forma sencilla y eficiente de lograr esto. La forma más simple es leer todas las líneas del fichero hasta llegar a la última. Sencillo, pero si el fichero es muy grande, no es una opción viable. La otra opción es utilizar la clase RandomAccessFile para situarnos en un lugar cercano al final del fichero y leer las líneas a partir de ahí, pero en este caso debes estimar la longitud máxima de las líneas, por lo que tampoco es perfecto. En mi caso, la longitud es constante, por lo que no supone un problema. Este es el método que he construido:

public static String getFileLastLine(String filePath, long maxLineLength){
    String lastLine = "";

    RandomAccessFile raf = null;

    try{
        raf = new RandomAccessFile(filePath, "r");

        long fileLength = raf.length();
        if(fileLength > maxLineLength) {
            raf.seek(fileLength - maxLineLength);
        }
        String readLine = "";
        while((readLine = raf.readLine()) != null){
            lastLine = readLine;
        }                     
    }
    catch (Exception e){
        e.printStackTrace();
    }
    finally{
        if(raf != null){
            try{
                raf.close();
            }
            catch(Exception e){
                // Nada
            }
        }
    }

    return lastLine;
}

Java y caracteres japoneses

[japonés] [programación]

El programa que uso para repasar japonés está hecho en Java. Según voy avanzando en el número de Kanji aprendidos, voy descubriendo que algunas de las palabras clave están incompletas o tienen faltas de ortografía. Hace un tiempo ya implementé una solución consistente en un fichero con las correcciones, lo cual fue bastante sencillo. El problema ha sido el último error que he encontrado, que no afecta a la palabra clave, sí no a el Kanji mostrado.

Cuando salía la palabra clave “parcela” debería aparecer su kanji correspondiente (壌) pero en su lugar aparecía el kanji de “deferencia” (譲). Me puse a investigar como usar caracteres japoneses en Java y en realidad es bastante sencillo. Java trabaja con Unicode, por lo que se pueden incluir estos caracteres tranquilamente en el código. Por ejemplo, este código sería correcto:

char kanji = '譲';

Como la idea es seguir usando un fichero de texto para tener todas las correcciones, intenté guardar el kanji en el fichero y después recuperarlo, pero por algún motivo no conseguí hacerlo funcionar. Pasé entonces a otra solución. En vez de guardar el kanji, guardar su código de Unicode, que en este caso sería u58CC.

Por lo tanto necesitaba dos cosas, obtener el código Unicode de un carácter japonés, y obtener el carácter japonés a partir de su código Unicode.

StackOverflow, como casi siempre, tiene la solución.

Pasar de kanji a unicode

char kanji = '譲';
String unicode = "\u" + Integer.toHexString(kanji | 0x10000).substring(1);

Pasar de unicode a kanji

String unicode = "\u58CC";
char kanji = (char) Integer.parseInt( s.substring(2), 16 );

¡Mucho más fácil de lo que yo pensaba!

Y por último, una página muy útil para obtener el valor Unicode de cualquier caracter y viceversa.

Descargar versiones antiguas de la JDK

[software]

Por razones de compatibilidad, tengo que usar la jdk 1.6.0_20 en un proyecto. He estado dando vueltas buscando y resulta que hay una página donde está TODO. Y quiero decir todas las versiones de todos sus productos.