Apunte de archivos

Download Report

Transcript Apunte de archivos

Entrada y Salida
Java
Clase File
• La clase File proporciona mucha informacion
relacionada con archivos y con la obtencion de
informacion basica sobre esos archivos.
• Constructores
• File miArchivo;
• miArchivo=new File(“pooi104/prueba1”);
• O miArchivo=new File(“pooi104”,”prueba1”);
• O File miDirectorio=new File(“pooi104”);
• miArchivo=new File(miDirectorio,”prueba1”);
La clase File contiene los
siguiente metodos:
•
•
•
•
•
•
String getName()
String getPath()
String getAbsolutePath()
String getParent()
Boolean renameTo(File nuevonombre)
Boolean exists()
Continuacion…
•
•
•
•
•
Boolean canWrite();
Boolean canRead()
Boolean isFile()
Boolean isDirectory()
Boolean isAbsolute()
•
•
•
•
Long lastModified()
Long length()
Boolean mkdir()
String[] list()
Streams de entrada
• Hay muchas clases
dedicadas a la obtención
de entrada desde distintas
fuentes. Hay dos que son
las clases padre de todas
las demás, que son: la
clase Reader (utilizada
para entrada de caracteres)
y la clase ImputStream
(utilizada para estrada de
bytes).
Jerarquia de clases de entrada
de caracteres
Continua
• Jerarquia de clases de
entrada de bytes.
• Jerarquia de clases de
salida de caracteres
• Jerarquia de clases de
salida de bytes
Objetos FileInputStream y
FileReader
• Los objetos FileInputStream representan
archivos binarios accedidos en orden
secuencial, byte a byte, y los objetos
FileReader representan archivos de texto
accedidos en orden secuencial carácter a
carácter. Con FileInputStream, se puede
elegir acceder a un byte, varios bytes o al
fichero completo, y también podemos hacer
lo mismo con los caracteres de FileReader.
Abrir un archivo con
FileInputStream o con FileReader
FileReader miFicheroRd;
FileInputStream miFicheroSt;
miFicheroRd = new FileReader(
miFicheroSt = new
"/etc/kk" );
FileInputStream( "/etc/kk" );
De otra manera
De otra manera
File miFicherot;
File miFichero;
FileReader miFicheroRd;
FileInputStream miFicheroSt;
miFichero = new File( "/etc/kk" miFicherot = new File( "/etc/kk"
);
);
miFicheroRd = new
miFicheroSt = new
FileReader(miFicherot);
FileInputStream(miFichero);
Lectura de un FileInputStream
o de un FileReader
int read();
• int read( byte b[] );
int read( char b[] );
• Lee un byte o un
carácter y devuelve -1
al final del stream.
• Llena todo el array, si
es posible. Devuelve
el número de bytes o
caracteres leídos o -1
si se alcanzó el final
del stream.
continuacion read()
• int read( byte b[],int offset,int
longitud );
int read( char b[],int offset,int
longitud);
• Lee longitud bytes
o caracteres en b
comenzando por
b[offset]. Devuelve
el número de bytes
o caracteres leídos
o -1 si se alcanzó el
final del stream
Escritura un archivo con
FileOutputStream y FileWriter
• void write( int b );
• void write( byte b[] );
void write( char b[] );
void write( String str );
• void write( byte b[],int
offset,int longitud );
void write( char b[],int
offset,int longitud );
void write( String str,int
offset,int longitud );
• Escribe un byte o un
carácter.
• Escribe todo el array o
el string , si es posible.
• Escribe longitud bytes
o caracteres de b o del
string comenzando por
la posición offset.
Para cerrar los archivos
• Cuando se termina de trabajar con un
archivo, hay dos formas de cerrarlo:
explícitamente, o implícitamente cuando se
recicla el objeto (el garbage collector se
encarga de ello).
• Para cerrarlo explícitamente, se utiliza el
método close():
•
miFicheroSt.close();
Objetos DataInputStream
• Los objetos DataInputStream son streams
de datos que pueden leer cualquiera de las
variables de tipo nativo, como floats, ints o
chars. Se utilizan DataInputStream con
archivos binarios, y no tiene equivalente de
caracteres.
Abrir y cerrar con DataInputStream
• Para abrir y cerrar un objeto DataInputStream, se utilizan los mismos
métodos que para FileInputStream:
DataInputStream miDStream;
FileInputStream miFStream; // Obtiene un controlador de fichero
miFStream = new FileInputStream ("/etc/ejemplo.dbf" ); //Encadena
//un fichero de entrada de datos
miDStream = new DataInputStream( miFStream );
// Ahora se pueden utilizar los dos streams de entrada para //
//acceder al fichero (si se quiere...)
miFStream.read( b );
i = miDStream.readInt();
// Cierra el fichero de datos explícitamente //Siempre se cierra
//primero el fichero stream de mayor nivel
miDStream.close();
miFStream.close();
Lectura con DataInputStream
• Se puede utilizar
read() igual que con
FileInputStream.
• Pero tambien cuenta
con otros metodos
diseniados para leer
cada un de lo tipos
primitivos de java
• Cada metodo leera un
valor del tipo indicado
•
•
•
•
•
•
•
•
•
byte readByte()
Int readUnsignedByte()
short readShort()
int
readUnsignedShort()
char readChar()
int readInt()
long readLong()
float readFloat()
double readDouble()
Escritura con DataOutputStream
• Se puede utilizar
write() igual que con
FileOutputStream.
• Pero tambien cuenta
con otros metodos
diseniados para
escribit cada un de lo
tipos primitivos de
java
• void writeBoolean(
boolean b );
• void writeByte( int i
);
• void writeShort( int i
);
• void writeChar( int i );
• void writeInt( int i );
• void writeFloat( float f
);
• void writeDouble(
double d );
continua
void writeBytes( String
s );
void writeChars( string
s );
• Para escribir cadenas, se
tienen dos posibilidades:
bytes y caracteres.
• bytes son var de 8 bits
• caracteres son de 16 bits.
• Si las cadenas utilizan
caracteres Unicode,
debemos escribirlas con
writeChars().
Archivos de acceso aleatorio
• Si deseamos saltar de un registro a otro dentro de
un archivo java proporciona la clase
RandomAccessFile
• Para crear un objeto RandomAccessFile se puede
hacer de las siguientes dos formas:
miRAFile = new RandomAccessFile( String
nombre,String modo );
miRAFile = new RandomAccessFile( File
fichero,String modo );
• En donde modo indica si es de lectura ( r ) o
de lectura/escritura ( rw)
Por ejemplo
RandomAccessFile miRAFile;
miRAFile = new RandomAccessFile(
"/tmp/kk.dbf", "rw" );
• Esta clase cuenta con los mismos
metodos de lectura y de escritura que
DataInputStream y DataOutputStram
con read() y write()
Pero tambien cuentan con metodos para moverse dentro de un
archivo
• Long getFilePointer
• Void seek(long pos)
• Regresa la posicion
actual del puntero del
archivo.
• Coloca al puntero del
archivo en la posicion
indicada;
desplazandoce pos
bytes desde el
comienzo del archivo.
La posicion 0 indica el
comienzo del archivo
continuacion
• Long length()
• Regresa la longitud del
archivo. La posicion
length indica el final
del archivo
Agregar informacion ejemplo
miRAFile = new RandomAccessFile(
"/tmp/kk.log","rw" );
//abre el archivo kk.log como de lectura
y escritura
miRAFile.seek( miRAFile.length() );
//coloca el apuntador del archivo al
final de este
// Cualquier write() que hagamos a
partir de este punto del código
//
añadirá información al fichero
ejemplo
import java.io.*;
/* Cada vez que ejecutemos este programita, se
incorporara una nueva linea al fichero de log que se
crea la primera vez que se ejecuta *//
class Log {
public static void main( String args[] ) throws
IOException { RandomAccessFile miRAFile;
String s = "Informacion a incorporar\nTutorial de
Java\n";
// Abrimos el fichero de acceso aleatorio
miRAFile = new RandomAccessFile( "/tmp/java.log","rw"
);
// Nos vamos al final del fichero
miRAFile.seek( miRAFile.length() );
// Incorporamos la cadena al fichero
miRAFile.writeBytes( s );
// Cerramos el fichero
miRAFile.close();
}
}