entrada y salida java. clase file la clase file proporciona mucha informacion relacionada con...
TRANSCRIPT
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
FileReaderFileInputStream miFicheroSt;
miFicheroSt = new FileInputStream( "/etc/kk" );
De otra manera
File miFichero;
FileInputStream miFicheroSt;
miFichero = new File( "/etc/kk" );
miFicheroSt = new FileInputStream(miFichero);
FileReader miFicheroRd;
miFicheroRd = new FileReader( "/etc/kk" );
De otra manera
File miFicherot;
FileReader miFicheroRd;
miFicherot = new File( "/etc/kk" );
miFicheroRd = new FileReader(miFicherot);
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
ejemploimport 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(); } }