08 mayo 2014

Read Properties con rutas de Windows

Cuando se leen rutas en formato Windows desde un properties de esta manera:

props.load(new FileInputStream("Ruta"));

Las rutas no las carga tal cual. Por ejemplo: param=C:\Temp aparecería como C:Temp dado que escapa todo \

Os sugiero este método manual para leer los valores de un properties TAL CUAL:
/**
 * Método para leer un fichero de properties literalmente. No escapa \
 * @param strFileName Ruta al fichero de properties
 * @return El objeto de properties completo con el contenido del fichero
 * @throws IOException En el caso de no encontrar el fichero de propiedades.
 */
private static Properties readPropertiesFile(String strFileName) throws IOException {  
DataInputStream dis = new DataInputStream(new FileInputStream(strFileName));  
BufferedReader br = new BufferedReader(new InputStreamReader(dis));  
Properties properties = new Properties();
        try {  
            String eachLine = null;  
            String[] temp = null;  
            while((eachLine=br.readLine())!=null) {  
                temp = eachLine.split("=");  
                if(temp.length>1) {  
                    properties.put(temp[0].trim(), temp[1].trim());  
                }  
            } 
            return properties;
        } catch (FileNotFoundException e) {  
            throw e;  
        } catch (IOException e) {  
        throw e;  
        } finally{
        dis.close();
        br.close();
        }
  } 

28 abril 2014

Checkboxes en Swing

Llevo sin escribir la pera, y no por falta de ganas, por falta de tiempo.

Allá va un snippet muy chulo para saber si un checkbox en swing está marcado o no.

private final Action toggleSameOrigin = new ToggleAction();
...
JCheckBox checkIsSameFolder = new JCheckBox("La ruta de destino es la misma que la de origen");
checkIsSameFolder.setSelected(true);
checkIsSameFolder.setAction(toggleSameOrigin);
...
private class ToggleAction extends AbstractAction {

public void actionPerformed(ActionEvent e) {
if(checkIsSameFolder.isSelected() && !checkIsSameFolder.getText().isEmpty()){
JOptionPane.showMessageDialog(null, "Is Enabled");
}else{
JOptionPane.showMessageDialog(null, "Is NOT Enabled");
}
}
}

28 octubre 2013

Y puntos suspensivos...

Editando un fichero valores de la aplicación Android que estoy desarrollando, cuando en uno de los valores puse puntos suspensivos, Eclipse, muy majo él, me dijo:

Replace "..." with ellipsis character (..., …)

Y aunque a priori parece algo sencillo, no caí en la cuenta de que tenía que reemplazar los puntos suspensivos literalmente por lo que decía Eclipse =

Es una chorrada, pero me ha parecido curioso.

18 octubre 2013

¡Socorro! ¡Mi App no gira!

Madre mía, desde agosto que no escribo nada por aquí.

Desde entonces he aprendido un gritón de cosas en Java que me gustaría tener por aquí cerca, y entre ellas, un montón de cosas de Android, ya que mi primera aplicación en Google Play ya casi se puede tocar.

Ayer me sucedió algo muy curioso, tras reescribir los themes de Android (para que funcionaran en Android 2.3.x y 4.x) mi activity con su layout bonito y todas sus cositas dejó de girar.

01 agosto 2013

java.lang.UnsupportedClassVersionError: Bad version number in .class file

¡Buenos días caballeros(y caballeras) del programar!

Tengo en mente un cerro de Snippets para poner por aquí, lo único malo es que no dispongo del tiempo suficiente para hacerlo, pero voy a poner aquí algo que asusta más que lo que se tarda en corregir:

java.lang.UnsupportedClassVersionError: Bad version number in .class file

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)

Cuando vas a ejecutar un main() en Eclipse (bueno, en Java) y te salta esto sin venir a cuento, acompañado de una ventanita flotante que te dice:

Could not find the main class. Program will exit.

Esto es causa de que tengas una versión compilada con una máquina virtual Java distinta con la que estás ejecutando. Es decir, mi Eclipse le ha dado por ponerme como JRE la 1.5 por defecto cuando en todos los proyectos uso la 1.7 para compilar y ejecutar.


Curse you Eclipse!

Así que se soluciona tan rápidamente como poniendo de acuerdo la versión de Java de compilación con la de ejecución.

Hasta otra!

27 junio 2013

Leer de fichero en Java con formato ISO-8859-15

Qué de tiempo sin actualizar, así que me voy a proponer subir un montón de Snippets que tengo en mente ya que son trocitos de código sencillo y que he ido reutilizando en un proyecto bien grande.

Hoy, cómo leer un fichero de texto en Java con un Charset (formato/codificación) ISO-8859-15, ya que esto es muy puñetero cuando se ha de desarrollar cosas en Españó


/**
* Devuelve un String con el contenido del fichero en ISO-8859-15
* @param path Ruta al fichero
* @return String con todo el fichero
* @throws Exception En caso de error.
*/
public static String getFileContentISO_88559_15(String path) 
                                                            throws Exception{
File file = null;
FileInputStream fis = null;

//Stringbuffer para componer el resultado.
StringBuffer result = new StringBuffer();
try {
//Comprobamos que el fichero exista
file = new File(path);
if(!file.exists()){
throw new Exception("El fichero no existe");
}
fis = new FileInputStream(file);

// Leemos el fichero
String linea;
BufferedReader r = new BufferedReader(
                                           new InputStreamReader(
                                           fis, Charset.forName("ISO-8859-15")));
while ((linea = r.readLine()) != null){
    result.append(linea);
}
} catch (Exception e) {
throw e;
} finally {
//Cerramos el flujo si no es nulo.
try {
if (null != fis) {
fis.close();
}
} catch (Exception e2) {
throw e2;
}
}
return result.toString();
}

28 enero 2013

Evitar WARN No appenders could be found


Hoy vamos a ver cómo evitar un mensaje que ami personalmente me chirría mucho.

Log4j  se pone especialmente pesado con este warning que viene a decir más bien poco, ya que la información la acaba sacando igualmente:

log4j:WARN No appenders could be found for logger (es.snippetea.EjemploLog).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.