250 likes | 377 Views
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”);
E N D
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()
Boolean canWrite(); Boolean canRead() Boolean isFile() Boolean isDirectory() Boolean isAbsolute() Long lastModified() Long length() Boolean mkdir() String[] list() Continuacion…
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.
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.
FileInputStream 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); Abrir un archivo con FileInputStream o con 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. Lectura de un FileInputStream o de un FileReader
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 continuacion read()
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. Escritura un archivo con FileOutputStream y FileWriter
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();
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() Lectura con DataInputStream
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 ); Escritura con DataOutputStream
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(). continua
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()
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 Pero tambien cuentan con metodos para moverse dentro de un archivo
Long length() Regresa la longitud del archivo. La posicion length indica el final del archivo continuacion
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(); } }