Componentes clave
Clases Métodos
java.io.File boolean exists( )
boolean setLastModified(long nuevaHora) boolean setreadOnly( )
boolean setWritable(boolean puedeEscribirse boolean quien)
En la solución anterior se mostró cómo obtener varios atributos de un archivo empleando la clase File. Ésta también le da la capacidad de establecer atributos. En esta solución se muestra el procedimiento.
Paso a paso
Para establecer los atributos asociados con un archivo se requieren estos pasos: 1. Cree el objeto de File que representa al archivo.
2. Si es necesario, confirme que el archivo existe al llamar a exists( ) en la instancia de File. 3. Establezca el atributo o los atributos en que está interesado al llamar a uno o más métodos
de File.
Análisis
Los constructores de File y el método exists( ) se describen con detalle en la solución anterior. (Consulte Obtenga atributos de archivo, para conocer más detalles.) Como se mencionó, a menudo querrá confi rmar que en realidad existe el archivo representado por un objeto de File antes de que trate de obtener información acerca de él. Esto se hace al llamar a exists( ).
Para establecer los atributos de un archivo, usará uno o más de los siguientes métodos. Observe que setWritable( ) requiere Java 6 o posterior.
boolean setLastModified(long nuevaHora) Establece la estampa de tiempo del archivo en
nuevaHora. Devuelve verdadero si se realiza
correctamente. La hora se representa como el número de milisegundos a partir de 1 de enero de 1970. Puede obtener una hora en esta forma al usar la clase
Calendar.
boolean setReadOnly( ) Hace que el archivo sea de sólo lectura. Devuelve
verdadero si se realiza correctamente.
boolean setWritable(boolean puedeEscribirse, boolean quien)
Establece el atributo de permiso de escritura del archivo. Si puedeEscribirse es true, entonces las operaciones de escritura se habilitan. De otra manera, se niegan. Si quien es true, entonces el cambio sólo se aplica al propietario del archivo. De otra manera, el cambio se aplica de manera general. (Requiere Java 6 o posterior.)
Ejemplo
En el siguiente ejemplo se muestra cómo establecer los atributos de un archivo. // Establezca atributos de archivo.
//
// Para usar el programa, especifique el nombre del archivo
// en la línea de comandos. Por ejemplo, establezca los atributos // de un archivo prueba.pba, use la siguiente línea de comandos //
// java EstablecerAtributosArchivo prueba.pba //
import java.io.*; import java.util.*;
class EstablecerAtributosArchivo {
// muestra el estatus de lectura/escritura de un archivo. static void rwStatus(File f) {
if(f.canRead( )) System.out.println(" De lectura"); else System.out.println(" No es de lectura");
if(f.canWrite( )) System.out.println(" De escritura"); else System.out.println(" No es de escritura");
}
public static void main(String args[ ]) {
// Primero, se asegura de que se ha especificado un archivo. if(args.length != 1) {
System.out.println("Uso: EstablecerAtributosArchivo nombrearchivo"); return;
}
File f = new File(args[0]);
// Confirma que existe el archivo. if(!f.exists( )) {
System.out.println("No se ha encontrado el archivo."); return;
}
// Despliega el estado de lectura/escritura // y la estampa de tiempo originales.
System.out.println("permisos originales de hora y lectura/escritura:"); rwStatus(f);
System.out.println(" Modificado por \u00a3ltima vez el " + new Date(f.lastModified( )));
System.out.println( );
// Actualiza la estampa de tiempo.
long t = Calendar.getInstance( ).getTimeInMillis( ); if(!f.setLastModified(t))
System.out.println("No se puede establecer la hora."); // Establece el archivo en sólo lectura.
if(!f.setReadOnly( ))
System.out.println("No puede establecerse como de s\u00a2lo lectura."); System.out.println("Permisos de lectura/escritura y hora modificados:"); rwStatus(f);
System.out.println(" Modificado por \u00a3ltima vez el " + new Date(f.lastModified( )));
System.out.println( );
// Devuelve el estatus de lectura/escritura. if(!f.setWritable(true, false))
System.out.println("No puede regresar a lectura/escritura."); System.out.println("Ahora los permisos de lectura/escritura son: "); rwStatus(f);
} }
Aquí se muestra la salida:
Permisos originales de hora y lectura/escritura: De lectura
De escritura
Modificado por última vez el Thu Mar 27 19:25:35 CST 2008 Permisos de lectura/escritura y hora modificados:
De lectura
No es de escritura
Modificado por última vez el Thu Mar 27 23:17:44 CST 2008 Ahora los permisos de lectura/escritura son:
De lectura De escritura
Opciones
Además del constructor usado por esta solución, File defi ne otros tres. Consulte Obtenga atributos de archivos para conocer la descripción.
Si está usando Java 6 o posterior y si su plataforma lo soporta, puede establecer un atributo de permiso ejecutable de un archivo al llamar a setExecutable( ). Tiene dos formas, que se muestran aquí:
boolean setExecutable(boolean puedeEjecu)
boolean setExecutable(boolean puedeEjecu, boolean quien)
Si puedeEjecu es true, entonces se permiten las operaciones de ejecución. De otra manera, se niegan. La primera forma sólo afecta al propietario del archivo. En la segunda forma, si quien es true, el cambio se aplica sólo al propietario del archivo. Si quien es false, se aplica de manera general.
Si está usando Java 6 o posterior, y si su plataforma lo soporta, puede establecer o limpiar el atributo de sólo lectura de un archivo al llamar a setReadable( ). Tiene dos formas, que se muestran aquí:
boolean setReadable(boolean puedeLeer)
boolean setReadable(boolean puedeLeer, boolean quien)
Si puedeLeer es true, entonces se permiten las operaciones de lectura. De otra manera, se niegan. La primera forma afecta sólo al propietario del archivo. En la segunda forma, si quien es true, entonces el cambio sólo se aplica al propietario del archivo. Si es false, se aplica de manera general.
Además de establecer los atributos de archivo, File también le permite eliminar un archivo, cambiar su nombre y crear un directorio. Aquí se muestran los métodos que lo hacen:
boolean delete( ) Elimina un archivo (o un directorio vacío). Devuelve verdadero si es correcto.
boolean mkdir( ) Crea un directorio. Devuelve verdadero si se aplica correctamente.
boolean mkdirs( ) Crea toda una ruta de directorio (que incluye todos los directorios principales necesarios). Devuelve verdadero si se aplica correctamente.
boolean renameTo(File nuevoNombre) Cambia el nombre del archivo por nuevoNombre. Devuelve
Otra tarea común relacionada con archivos consiste en obtener una lista de los archivos dentro de un directorio. Por ejemplo, tal vez quiera obtener una lista de todos los archivos de un directorio para que puedan transmitirse a un sitio de respaldo o para que pueda confi rmar que se han instalado apropiadamente todos los archivos de una aplicación. Cualquiera que sea el propósito, puede obtenerse una lista de directorios empleando convenientemente la clase File.
Paso a paso
Java proporciona diversas maneras de obtener un listado de directorios. Para el método usado en esta solución se requieren estos pasos:
1. Cree un objeto de File que representa el directorio.
2. Confirme que existe el objeto de File y en realidad representa un directorio válido. (En los casos en que se sabe que el objeto de File representa un directorio existente, puede omitirse este paso).
3. Si quiere obtener una lista filtrada de archivos (como las que tienen una extensión de archivo especificada), cree un objeto de FileFilter que describe el patrón que los archivos deben cumplir.
4. Para obtener un listado de directorios, llame a listFiles( ) en el objeto de File. Devuelva una matriz de objetos de File que represente a los archivos en el directorio. Hay tres versiones de listFiles( ). Uno le da todos los archivos; los otros dos le permiten filtrar los archivos.
5. Para obtener el nombre del archivo, llame al método getName( ) de File.
6. Si sólo está interesado en archivos normales y no en directorios, use el método isDirectory( ) para determinar cuáles archivos representan directorios.
Análisis
Consulte Obtenga atributos de archivos para conocer una descripción de los constructores de File y de los métodos exists( ) e isDirectory( ). Es importante comprender que un listado de directorios sólo puede obtenerse si el objeto de File representa un directorio. Por tanto, a menudo es necesario confi rmar que el objeto es, por supuesto, un directorio válido antes de tratar de obtener la lista de archivos.