Herramientas de usuario

Herramientas del sitio


bloque4:ficheros

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
bloque4:ficheros [04/03/2018 17:26] – [Control de Excepciones] Fernando Valdeónbloque4:ficheros [05/03/2018 11:38] (actual) – borrado Fernando Valdeón
Línea 1: Línea 1:
-====== Manejo de ficheros de texto ====== 
-==== Paquete java.io ==== 
-Aparte de la entrada y salida estándar representadas por la clase ''System'' mediante ''in'' y ''out'', tenemos la salida y entrada desde ficheros. 
  
-La mayoría de las clases para manejo de ficheros están en el paquete ''java.io'', y por lo tanto deben ser importadas. 
-===== Clase File ===== 
-La clase [[https://docs.oracle.com/javase/8/docs/api/java/io/File.html|File]] se usa para representar un fichero o directorio desde un programa en Java. Con esta clase no se puede leer ni escribir en él, pero ofrece una serie de métodos interesantes. 
- 
-**Un objeto File es solamente una asociación a un fichero en el sistema; No tiene por qué existir.** 
- 
-==== Uso de la clase File ==== 
-Para crear una instancia de File indicamos el nombre del fichero mediante un String: 
-''File fichero = new File("rutaFichero");'' 
- 
-El nombre del fichero puede estar compuesta simplemente por su nombre (ruta relativa) o por una ruta absoluta. **Siempre que indiquemos solo un nombre, se parte del directorio base del proyecto**. 
- 
-**Métodos:** 
-^Método^Descripción^ 
-|boolean createNewFile()|Crea el fichero asociado al objeto File. Para poder crearlo, no debe existir| 
-|boolean mkdir()|Crea el directorio asociado al objeto File| 
-|boolean delete()|Elimina el fichero o directorio. Si es un directorio debe estar vacío| 
-|boolean exists()|true si el fichero representado existe| 
-|String getName()| Devuelve el nombre del fichero o directorio| 
-|boolean isDirectory()|true si es un directorio| 
-|boolean isFile()|true si es un fichero| 
-|String getPath()|Devuelve la ruta con la que se creó el objeto| 
-|String getAbsolutePath()|Devuelve la ruta absoluta| 
-|File getParentFile()|Devuelve un objeto File asociado al directorio que contiene el objeto actual| 
-|long length()|Devuelve el tamaño en bytes del fichero, ó 0 si no existe.| 
-|boolean mkdirs()|Crea todos los directorios especificados en la ruta del objeto File, aunque no existan| 
-|boolean renameTo(File dest)|Renombra el fichero| 
-|String[] list()|Devuelve un array con los nombres de los archivos o directorios que contiene el directorio asociado al objeto File. null si no es un directorio| 
- 
-<code java> 
-File fichero = new File(ruta); 
-if(fichero.exists()){ 
-   System.out.println("Nombre del archivo " + fichero.getName()); 
-   System.out.println("Ruta " + fichero.getPath()); 
-   System.out.println("Ruta absoluta" + fichero.getAbsolutePath()); 
-   System.out.println("Tamano " + fichero.length()); 
-} 
-File directorio = new File(“src\\directorio1”); 
-directorio.mkdir(); 
- 
-</code> 
-===== Clase PrintWriter ===== 
-La clase PrintWriter es una de las más fáciles de usar a la hora de escribir texto en un fichero. 
-Usa los mismo métodos con los que escribimos por pantalla con ''System.out'': 
- 
-__Si el fichero no existe, se crea. Si ya existe, se sobrescribe__. 
- 
-<code java> 
-//Instanciamos PrintWriter a partir de un objeto File 
-File fichero = new File("fichero.txt"); 
-PrintWriter escritor = new PrintWriter(fichero); 
- 
-//o directamente 
-PrintWriter escritor = new PrintWriter("fichero.txt"); 
- 
-//escribir el contenido de un array de String en fichero 
-for(int i = 0; i < array.length; i++){ 
-   escritor.println(array[i]); 
-} 
- 
-//cerramos el PrintWriter 
-escritor.close() 
-</code> 
- 
- 
- 
-Hay que tener en cuenta que las clases de entrada/salida a fichero pueden lanzar **excepciones** que debemos de controlar. 
- 
-=== Añadir texto a un fichero existente === 
-Siempre que escribamos en un fichero que ya existe, el fichero se sobrescribirá. 
-PrintWriter no tiene control sobre esto, pero si la clase de la que hereda ''FileWriter''. En este caso **debemos crear un PrintWriter a partir de un FileWriter**. 
- 
-Para añadir texto a un fichero en lugar de sobrescribirlo, indicaremos un segundo parámetro al constructor de FileWriter: 
- 
-<code java> 
-//Indicando true en el constructor de FileWriter, añadimos texto 
-File fichero = new File("fichero.txt"); 
-FileWriter filewriter = new FileWriter(fichero, true); 
-PrintWriter escritor = new PrintWriter(filewriter); 
- 
-//o sin el objeto File 
-FileWriter filewriter = new FileWriter("fichero.txt", true); 
-PrintWriter escritor = new PrintWriter(filewriter); 
-</code> 
-===== Leer con Scanner ===== 
-La clase Scanner permite leer desde distintos flujos de entrada. Habitualmente hemos usado el flujo estándar ''System.in'', pero también permite leer directamente desde un String, o desde un objeto ''File''. 
- 
-En este caso __necesitamos siempre un objeto File__, pero es la forma más sencilla de leer un fichero de texto. 
- 
-<code java> 
-File fichero = new File("fichero.txt"); 
-Scanner lector = new Scanner(fichero); 
- 
-String cadenaLeida = lector.nextLine(); 
-int enteroLeido = lector.nextInt(); 
- 
-lector.close(); 
-</code> 
- 
-En algunos casos necesitamos leer desde un fichero sin saber cuantas lineas tiene: 
- 
-<code java> 
-File fichero = new File("fichero.txt"); 
-Scanner lector = new Scanner(fichero); 
- 
-//leo una linea, mientras queden lineas en el fichero 
-while(lector.hasNextLine()){ 
-   System.out.println(lector.nextLine()); 
-} 
-lector.close() 
-</code> 
-===== Otras formas de escribir en fichero ===== 
-Aunque la clase PrintWriter sea la más sencilla de usar, también podemos necesitar otros modos de escritura: 
- 
-  * FileWriter: la necesitamos para indicar si queremos o no añadir texto a un fichero. 
-  * BufferedWriter: se usa para no escribir contantemente en disco, y utiliza un buffer para almacenar los datos. 
- 
-Todas las clases se pueden usar de forma conjunta: 
- 
-<code java> 
- 
-FileWriter fw = new FileWriter("fichero.txt",true); 
-BufferedWriter bf = new BufferedWriter(fw); 
-PrintWriter escritor = new PrintWriter(bf); 
- 
-escritor.println("Anado texto a un fichero, y uso buffer de lectura"); 
- 
-escritor.close() 
-</code> 
- 
-Basta con cerrar el elemento que //envuelve// a los demás, en este caso PrintWriter. 
- 
-===== Otras formas de leer desde fichero ===== 
-Aparte de la clase Scanner, existen otras clases para leer desde fichero: 
- 
-  * ''FileReader'' : permite acceder a un fichero en modo lectura. 
-  * ''BufferedReader'' : permite usar un buffer de lectura, para evitar el acceso constante a disco. 
- 
-<code java> 
-FileReader fr = new FileReader("fichero.txt"); 
-BufferedReader lector = new BufferedReader(fr); 
- 
-String cadenaLeida = lector.readLine(); 
-while(cadena != null){ 
-   System.out.println(cadenaLeida); 
-   cadenaLeida = lector.readLine(); 
-} 
- 
-lector.close(); 
-</code> 
- 
-===== Control de Excepciones ===== 
-Si hemos trabajado con fichero nos habremos dado cuenta de que lanzan excepciones que debemos de controlar si queremos usar estas clases. 
- 
-El control de excepciones se puede hacer de muchas formas, pero hay algo que debemos intentar hacer siempre: **asegurarnos de cerrar los recursos abiertos** 
- 
----- 
- 
-(c) {{date> %Y}} Fernando Valdeón 
bloque4/ficheros.1520184409.txt.gz · Última modificación: 16/09/2024 20:53 (editor externo)