Leer archivos en java

Java leer archivo de texto

ASCII es un archivo de TEXTO por lo que se utilizaría Readers para la lectura. Java también soporta la lectura de un archivo binario usando InputStreams. Si los archivos que se leen son enormes, entonces usted querrá usar un BufferedReader encima de un FileReader para mejorar el rendimiento de la lectura.

Tuve que hacer un benchmark de las diferentes formas. Comentaré mis conclusiones pero, en resumen, la forma más rápida es utilizar un BufferedInputStream sobre un FileInputStream. Si hay que leer muchos archivos, tres hilos reducirán el tiempo total de ejecución a aproximadamente la mitad, pero si se añaden más hilos se degradará progresivamente el rendimiento hasta hacer que se tarde tres veces más en completarse con veinte hilos que con uno solo.

Se supone que hay que leer un fichero y hacer algo significativo con su contenido. En los ejemplos aquí es leer líneas de un registro y contar las que contienen valores que exceden un cierto umbral. Así que estoy asumiendo que el Java 8 Files.lines(Paths.get(“/ruta/a/archivo.txt”)).map(line -> line.split(“;”)) no es una opción.

->  Un camino hacia el destino final

Ejemplo de lectura de archivos desde una carpeta en java

El paquete java.io contiene casi todas las clases que puedas necesitar para realizar entradas y salidas (I/O) en Java. Todos estos flujos representan una fuente de entrada y un destino de salida. El flujo en el paquete java.io soporta muchos datos como primitivos, objetos, caracteres localizados, etc.

Java proporciona un soporte fuerte pero flexible para la E/S relacionada con archivos y redes, pero este tutorial cubre una funcionalidad muy básica relacionada con los flujos y la E/S. Veremos los ejemplos más utilizados uno por uno –

Los flujos de bytes de Java se utilizan para realizar la entrada y salida de bytes de 8 bits. Aunque hay muchas clases relacionadas con los flujos de bytes, las clases más utilizadas son FileInputStream y FileOutputStream. A continuación se muestra un ejemplo que hace uso de estas dos clases para copiar un archivo de entrada en un archivo de salida –

Como siguiente paso, compila el programa anterior y ejecútalo, lo que dará como resultado la creación del archivo output.txt con el mismo contenido que tenemos en input.txt. Así que vamos a poner el código anterior en el archivo CopyFile.java y hacer lo siguiente –

Leer archivo java 8

No hay duda de que este es el enfoque más fácil de entender, y si el archivo es bastante corto (digamos, decenas de miles de líneas), también será aceptable en términos de eficiencia. Pero si el archivo es largo, es una forma muy ineficiente de hacerlo, por dos razones:

->  Tarjeta de red pc

Si te importa la velocidad, es mucho mejor leer un bloque de datos y luego procesarlo byte a byte en lugar de línea a línea. Cada vez que llegas al final de un número, lo añades a la Lista que estás construyendo.

El código anterior asume que se trata de ASCII (aunque podría ajustarse fácilmente para otras codificaciones), y que cualquier cosa que no sea un dígito (en particular, un espacio o una nueva línea) representa un límite entre dígitos. También asume que el archivo termina con un no-dígito (en la práctica, que la última línea termina con una nueva línea), aunque, de nuevo, podría ajustarse para tratar el caso en el que no sea así.

Es mucho, mucho más rápido que cualquiera de los enfoques basados en cadenas que también se han dado como respuesta a esta pregunta. Hay una investigación detallada de una cuestión muy similar en esta pregunta. Verás que existe la posibilidad de mejorarlo aún más si quieres ir por la línea de los multihilos.

Como leer un archivo en java usando scanner

Para ampliar la respuesta aceptada, almaceno los nombres de los archivos en un ArrayList (en lugar de volcarlos en System.out.println), he creado una clase de ayuda “MyFileUtils” para que pueda ser importada por otros proyectos:

->  Como ponerle contraseña a una usb

El ArrayList se pasa por “valor”, pero el valor se utiliza para apuntar al mismo objeto ArrayList que vive en el Heap de la JVM. De esta manera, cada llamada de recursión añade nombres de archivos a la misma ArrayList (NO estamos creando una nueva ArrayList en cada llamada recursiva).

Hay muchas buenas respuestas arriba, aquí hay un enfoque diferente: En un proyecto maven, todo lo que se pone en la carpeta resources se copia por defecto en la carpeta target/classes. Para ver lo que está disponible en tiempo de ejecución

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad