David González Segundo SISTEMAS OPERATIVOS ICO-16 Fecha: 27/Octubre/2014 Sistema de Archivos en Java Propósito: El alumno elaborara un programa en el que representa el sistema de archivos que permita guardar, modificar o borrar el directorio o archivo Alcance: Representa el sistema de archivos como una estructura. Requerimientos - IDE Java FUNCIONAMIEMTO El siguiente programa muestra una ventana con tres botones que son examinar directorio, borrar y guardar. El botón examinar directorio nos abrirá otra ventana para elegir un archivo o carpeta, si se elige una carpeta muestra los archivos que contiene y su directorio y si se elige un solo archivo, mostrará su directorio que el programa lo maneja como ruta absoluta. El botón borrar hace su función hasta que haiga un directorio cargado El botón guardar manda a un archivo de texto el directorio seleccionado Los resultados se muestran en el área de la ventana y manda mensajes sobre las operaciones de borrado y guardado.
Ventana principal del programa Figura 1 Se muestra la ventana de escoger un archivo o directorio al presionar el botón Examinar Directorio Figura 2
El siguiente código fuente realiza la función de la Figura 2: package sistemaarchivos; import java.awt.borderlayout; import java.io.file; import java.io.filenotfoundexception; import java.util.formatterclosedexception; import java.util.nosuchelementexception; import java.util.logging.formatter; import javax.swing.jfilechooser; import javax.swing.jframe; import javax.swing.joptionpane; import javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.jtextarea; /** * * @author David */ public class sist extends javax.swing.jframe private JTextArea areasalida; // se utiliza para salida private JScrollPane paneldespl; // se utiliza para que la salida pueda desplazarse private String directorio_archivo; private Formatter salida; //para flujo de salida public sist() super( "Directorios de Archivos" ); areasalida = new JTextArea(); paneldespl = new JScrollPane( areasalida ); add( paneldespl, BorderLayout.CENTER ); // agrega paneldespl a la GUI setsize( 400, 400 ); // establece el tamaã±o de la GUI setvisible( true ); // muestra la GUI //analizarruta(); // crea y analiza un objeto File initcomponents(); private File obtenerarchivo() JFileChooser selectorarchivos = new JFileChooser(); selectorarchivos.setfileselectionmode( JFileChooser.FILES_AND_DIRECTORIES ); int resultado = selectorarchivos.showopendialog( this ); if ( resultado == JFileChooser.CANCEL_OPTION ) System.exit( 1 ); File nombrearchivo = selectorarchivos.getselectedfile(); // obtiene el archivo seleccionado // muestra error si es invã lido if ( ( nombrearchivo == null ) ( nombrearchivo.getname().equals( "" ) ) )
JOptionPane.showMessageDialog( this, "Nombre de archivo invã lido", "Nombre de archivo invã lido", JOptionPane.ERROR_MESSAGE ); System.exit( 1 ); // fin de if return nombrearchivo; En donde el constructor es el método sist() y obtenerarchivo() es el método que se encarga de analizar el directorio seleccionado y retorna el nombre de archivo. Para probar el funcionamiento se creó una carpeta en home/dags/documentos/ con el nombre prueba y se le puso un archivo (en Linux Fedora 20) ver Figura 3. Figura 3 Posteriormente el código que permite obtener la información del directorio y el contenido de archivos es el siguiente: public void analizarruta() // crea un objeto File basado en la entrada del usuario File nombre = obtenerarchivo(); if ( nombre.exists() ) // si el nombre existe, muestra informaciã³n sobre à l // muestra la informaciã³n sobre el archivo (o directorio) directorio_archivo = nombre.getabsolutepath(); //guarda el directorio en una cadena areasalida.settext( String.format("%s%s\n%s\n%s\n%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s", nombre.getname(), " existe", ( nombre.isfile()? "es un archivo" : "no es un archivo" ), ( nombre.isdirectory()? "es un directorio" : "no es un directorio" ), ( nombre.isabsolute()? "es una ruta absoluta" :
"no es una ruta absoluta" ), "Ultima modificacion: ", nombre.lastmodified(), "Tamanio: ", nombre.length(), "Ruta: ", nombre.getpath(), "Ruta absoluta: ", directorio_archivo, "Padre: ", nombre.getparent() ) ); if ( nombre.isdirectory() ) // imprime el listado del directorio String directorio[] = nombre.list(); areasalida.append( "\n\ncontenido del directorio:\n" ); for ( String nombredirectorio : directorio ) areasalida.append( nombredirectorio + "\n" ); // fin de else // fin de if exterior else // no es archivo ni directorio, imprime mensaje de error JOptionPane.showMessageDialog( this, nombre +" no existe.", "ERROR", JOptionPane.ERROR_MESSAGE ); // fin de else Donde el directorio si existe se almacena en la variable directorio_archivo (ruta absoluta) y los detalles (contenido) en el arreglo directorio[], el resultado se muestra en la figura 4 Figura 4
Para guardar el directorio se usó un archivo de texto y el código que realiza esta función es: private void btnguardaractionperformed(java.awt.event.actionevent evt) // TODO add your handling code here: GuardarDirectorio guardardirectorio = new GuardarDirectorio(); guardardirectorio.abrirarchivoe(); guardardirectorio.agregatextoe(directorio_archivo); guardardirectorio.cerrararchivoe(); JOptionPane.showMessageDialog(null, "Directorio Guardado correctamente"); Donde los métodos abrirarchivoe(), agregatextoe(), y cerrararchivoe() se encargan de procesar la información guardada en la cadena directorio_archivo y el resultado se notifica en un mensaje (Figura 5) Figura 5 Abrimos el archivo para asegurar que se guardó el directorio escogido correctamente (Figura 6)
Figura 6 La última función del programa es borrar el directorio o archivo y esto se lleva a cabo con el siguiente código: public void borrar_archivo_directorio() File f = new File(directorio_archivo); if (f.delete()) JOptionPane.showMessageDialog(null, "El fichero " + directorio_archivo + " ha sido borrado correctamente"); else JOptionPane.showMessageDialog(null, "El fichero " + directorio_archivo + " no se ha podido borrar"); Y el código que efectúan los tres botones private void btnexaminaractionperformed(java.awt.event.actionevent evt) // TODO add your handling code here: analizarruta(); //GEN-LAST:event_btnExaminarActionPerformed private void btnborraractionperformed(java.awt.event.actionevent evt) //GEN-FIRST:event_btnBorrarActionPerformed // TODO add your handling code here: borrar_archivo_directorio(); //GEN-LAST:event_btnBorrarActionPerformed private void btnguardaractionperformed(java.awt.event.actionevent evt) //GEN-FIRST:event_btnGuardarActionPerformed // TODO add your handling code here: GuardarDirectorio guardardirectorio = new GuardarDirectorio(); guardardirectorio.abrirarchivoe(); guardardirectorio.agregatextoe(directorio_archivo); guardardirectorio.cerrararchivoe(); JOptionPane.showMessageDialog(null, "Directorio Guardado correctamente");
Donde se crea un objeto File con el directorio capturado y comprueba si existe. Y el resultado se muestra en la figura 7 Figura 7