Clase File
No sirve para leer ni para escribir en un archivo sino que
permite crear o borrar archivos o directorios, cambiar el nombre de un archivo,
leer el nombre del directorio, consultar si un nombre representa un fichero o
directorio, listar el contenido de un directorio… independientemente de la
plataforma (constante File.separator)
import
java.io.File;
String
sFichero = "miFichero.txt";
String
sDirectorio = "miDirectorio";
String
sPath = File.separator + sDirectorio + File.separator + sFichero;
System.out.println(sPath);
/*
\miDirectorio\miFichero.txt
*/
import
java.io.File;
String
sFichero = "miFichero.txt";
String
sDirectorio = "miDirectorio";
String
so = System.getProperty("os.name");
String
separador = System.getProperty("file.separator");
String
sPath = separador + sDirectorio + separador + sFichero;
System.out.println(sPath);
System.out.println(so);
/*
\miDirectorio\miFichero.txt
Windows
7
*/
Constructores
La clase File tiene tres constructores:
è File (String path)
è File (String path, String name)
è File (File dir, String name)
Métodos
El parámetro path
indica el camino hacia el directorio donde se encuentra el archivo, y name
indica el nombre del archivo.
Los métodos más importantes que describe esta clase son los
siguientes:
è String getName() – Nombre
è String getPath() – Camino relativo
è String getAbsolutePath() – Camino absoluto
è boolean exists()
è boolean canWrite() – Si el archivo
se puede escribir
è boolean canRead() – Si el archivo se
puede leer
è boolean isFile()
è boolean isDirectory()
è boolean isAbsolute() – Si un Path es
absoluto
è long lastModified()
è long length() – Longitud en bytes
è boolean mkdir() – Crea el directorio
è boolean mkdirs() – Crea el
directorio y los superiores si no existen
è boolean renameTo(File destino)
è boolean delete()
è String[] list
è String[] list(FileFilter filter)
Veamos un ejemplo:
import
java.io.*;
import
java.util.Date;
public
class EjemploClassFile {
public static void main(String[] args) {
String directorio;
if (args.length > 0)
directorio = args[0];
else
directorio = ".";
File actual = new File(directorio);
System.out.println("El directorio
es: ");
try{
System.out.println(actual.getCanonicalPath());
}
catch(IOException e){}
System.out.println("Su contenido
es:");
File[] archivos = actual.listFiles();
// Implemento un for-each
for (File archivo : archivos){
if(archivo.isFile()){
System.out.println("Nombre:
" + archivo.getName());
System.out.println("Longitud
en caracteres: " + archivo.length());
System.out.println("Modificado:
" + new Date(archivo.lastModified()));
System.out.println("Camino:
" + archivo.getPath());
System.out.println("Camino
absoluto: " + archivo.getAbsolutePath());
System.out.println("Se
puede escribir: " + archivo.canWrite());
System.out.println("Se
puede leer: " + archivo.canRead());
}
System.out.println();
}
}
}
Ejemplo de operaciones con ficheros
import
java.io.*;
public
class EjemploOperacionesArchivo {
public static void main(String[] args) {
// Creación de un fichero
try{
File file = new
File("D:\\Inazio.txt");
boolean resultado =
file.createNewFile();
if (resultado)
System.out.println("Archivo
creado");
else
System.out.println("No
se puede crear el archivo");
}
// Para su posible existencia este
manejador de error
catch(IOException e){
System.out.println("Se
produjo el error " + e.getMessage());
}
// Borrado de fichero
try{
File file = new
File("D:\\Inazio.txt");
boolean resultado =
file.delete();
if (resultado)
System.out.println("Archivo
borrado");
else
System.out.println("No
se pudo borar el archivo");
}
catch(Exception e){
System.out.println("Se
produjo el error " + e.getMessage());
}
}
}
Filtros de archivos
Un filtro es un objeto de una clase que implemente el interface
FilenameFilter, y tiene que redefinir la única función del interfaz denominada
accept, que deberá devolver un dato de tipo booleano.
Ejemplo
ARCHIVO
EJEMPLOFILTROARCHIVOS.JAVA
import
java.io.*;
public
class EjemploFiltroArchivos implements FilenameFilter{
// Propiedades
String extension;
// Constructor
EjemploFiltroArchivos(String Extension){
this.extension = extension;
}
// Métodos
public boolean accept(File dir, String
name){
return name.endsWith(extension);
}
}
ARCHIVO CLASEPRUEBAS.JAVA
import
java.io.*;
public
class ClasePruebas{
public static void main(String[] args) {
if (args.length !=0){
File fichero = new
File(args[0]);
if (fichero.isDirectory()){
String[] listaArchivos =
fichero.list(new EjemploFiltroArchivos(".exe"));
for(int i = 0; i <
listaArchivos.length; i++)
System.out.println(listaArchivos[i]);
}
}
}
}
En el código la he definido de forma que si el nombre del archivo
termina con una determinada extensión devuelve true y en caso contrario
devuelve false.
La función endsWith()
de la clase String realiza esta tarea tal como se ve en la porción de código.
La extensión se le pasa al constructor de la clase Filtro para
inicializar el dato extensión.
Si se quiere un listado filtrado, se puede pasar un objeto que
implemente FileFilter al método File.listFiles().
Para cada entrada en el directorio, un objeto File es pasado al método accept(). Si accept() retorna false, el archivo no será incluido.
Para C:\Windows devolvería bfsvc.exe, explorer.exe, notepad.exe,
regedit.exe, winhlp32.exe, write.exe…
Archivos de acceso directo
La clase RandomAccessFile
tiene todas las propiedades de las clases DataInputStream
y DataOutputStream; permite abrir un
archivo como lectura o como lectura y escritura simultáneamente de cualquier
tipo de datos primitivo. Si se utiliza para lectura (modo “r”) dispone de
métodos como: readInt(), readLong(),
readDouble(), readLine()… Si se utiliza como lectura/escritura (modo “rw”)
dispone de métodos como writeInt(),
writeLong(), writeDouble(), writeBytes()…
Constructores
è RandomAccessFile(File fichero,
String modo)
è RandomAccessFile(String fichero,
String modo) donde modo = “r” (lectura) o “rw” (lectura – escritura)
Métodos
è void seek(long posicion) – Establece
la posición actual del puntero en el byte especificado
è long getFilePointer() – Devuleve la
posición actual (en bytes)
è int skipBytes(int desplazamiento) –
Mueve el puntero el número de bytes del parámetro.
è long length() – Longitud del fichero
en bytes
Ejemplo
import
java.io.*;
public
class EjemplAccesoAleatorio{
public static void main(String[] args) {
char c;
boolean finArchivo = false;
RandomAccessFile archivo = null;
try{
archivo = new
RandomAccessFile("D:\\prueba.txt", "rw");
System.out.println("El
tamaño del archivo es: " + archivo.length());
do{
try{
c =
(char)archivo.readByte();
if (c == 'b'){
archivo.seek(archivo.getFilePointer()-1);
archivo.writeByte(Character.toUpperCase(c));
}
}
catch(EOFException e){
finArchivo = true;
archivo.close();
System.out.println("Todas
las b convertidas a mayúsculas");
}
}while(!finArchivo);
}
catch(FileNotFoundException e){
System.out.println("El
archivo no existe");
}
catch(IOException e){
System.out.println("Se
produjo un error con el archivo");
}
}
}
Tamaños de tipos
primitivos:
0 comments:
Publicar un comentario