domingo, 13 de noviembre de 2016

Como crear la función "Abrir archivo..." en una aplicacion java

Estamos creando una aplicación en Java, la cual nos va servir para editar un tipo de archivo ya sea un archivo de un formato ya conocido como doc, txt, midi, etc. o un formato de archivo que nosotros estemos personalizando.

Los formatos de archivos son sólo terminaciones en el nombre de un archivo que se separa por un punto. En la siguiente imagen se muestra una carpeta de archivos en Windows 7 la cual tiene palomeada la opción "Extensiones de nombre de archivo" para poder editar la extensión de los archivos. Esta carpeta contiene archivos de texto javascript (.js) y hoja de estilos (.css), ambos archivos son archivos de texto, la extension del archivo solo es una forma con la cual el sistema operativo reconoce para saber con que aplicacion se puede abrir.



Las clases que usaremos en esta función serán:

  • Properties. Consiste en una lista de propiedades que contiene funciones para escribir y leer un archivo.
  • JFileChooser. Es un cuadro de dialogo que muestra los archivos en el disco duro.

La siguiente función abre un cuadro de dialogo que muestra los archivos en el disco duro para que el usuario seleccione uno y devuelve el archivo que se seleccionó

public File abrirArchivo(){
  JFileChooser dialogo=new JFileChooser();
  dialogo.showOpenDialog(null);
  return dialogo.getSelectedFile();
}


Sólo mostraremos los archivos de formato midi para que sea mas facil al usuario encontrar el archivo que desea abrir.

public File abrirArchivo(){
  dialogo.showOpenDialog(null);
  dialogo.addChoosableFileFilter(new FileFilter(){
    public boolean accept(File archivo){
      String nombre=archivo.getName();
      return archivo.isDirectory() || nombre.endsWith(".midi");
    }
    public String getDescription(){
      return "Archivos instrumentales";
    }
  });
  return dialogo.getSelectedFile();
}


Si el usuario ha seleccionado un archivo del cuadro de dialogo tomaremos la ruta de la carpeta en la cual se encontraba el archivo y la guardaremos en un archivo properties para que la próxima vez que vaya abrir otro archivo se muestre primero lo que contiene esta carpeta a la cual llamamos carpeta de trabajo. Si el metodo getSelectedFile regresa valor nulo quiere decir que el usuario presiono el boton Cancelar o que cerro el cuadro de dialogo.

File archivo=dialogo.getSelectedFile();
    
if(archivo!=null){
  p.setProperty("carpetaTrabajo", archivo.getAbsolutePath());
  try{
    p.store(new FileOutputStream("karaoke.properties"), null);
  }catch(Exception e){
    e.printStackTrace();
  }
}


Las lineas anteriores guardan la carpeta de trabajo en un archivo, lo que nos falta es cargar esa carpeta en el objeto JFileChooser antes de mostrarlo al usuario.

Properties p=new Properties();
try{
  p.load(new FileInputStream("karaoke.properties"));
}catch(Exception e){
  e.printStackTrace();
}
JFileChooser dialogo=new JFileChooser();
if(p.getProperty("carpetaTrabajo")!=null){
  dialogo.setSelectedFile(new File(p.getProperty("carpetaTrabajo")));
}

La función completa nos queda de la siguiente manera:


  public void abrir(){
    Properties p=new Properties();
    try{
      p.load(new FileInputStream("karaoke.properties"));
    }catch(Exception e){
      e.printStackTrace();
    }
    JFileChooser dialogo=new JFileChooser();
    if(p.getProperty("carpetaTrabajo")!=null){
      dialogo.setSelectedFile(new File(p.getProperty("carpetaTrabajo")));
    }
    
    dialogo.addChoosableFileFilter(new FileFilter(){
      public boolean accept(File archivo){
        String nombre=archivo.getName();
        return archivo.isDirectory() || nombre.endsWith(".midi");
      }
      public String getDescription(){
        return "Archivos instrumentales";
      }
    });
    dialogo.showOpenDialog(null);
    File archivo=dialogo.getSelectedFile();
    
    if(archivo!=null){
      p.setProperty("carpetaTrabajo", archivo.getAbsolutePath());
      try{
        p.store(new FileOutputStream("karaoke.properties"), null);
      }catch(Exception e){
        e.printStackTrace();
      }
    }
  }

La primera vez que utilicemos la función se creará un archivo de texto con el nombre karaoke.properties



No hay comentarios:

Publicar un comentario