Si eres un desarrollador de Java, probablemente sabes lo tedioso y propenso a errores que puede ser trabajar con operaciones de entrada y salida (IO). Tienes que lidiar con flujos, lectores, escritores, archivos, directorios, filtros, comparadores y más. Tienes que escribir código estándar, manejar excepciones, cerrar recursos y asegurar la compatibilidad entre diferentes plataformas.
Afortunadamente, hay una biblioteca que puede hacerte la vida más fácil: Apache Commons IO. En este artículo, explicaremos qué es Commons IO, por qué debe usarlo, cómo descargarlo e instalarlo, cómo usarlo en su proyecto Java y cuáles son algunas alternativas a él.
Commons IO es una biblioteca de utilidades que ayuda a desarrollar la funcionalidad de IO. Proporciona varias clases de utilidad para operaciones comunes para IO de archivos que cubren una amplia gama de casos de uso. Le ayuda a evitar escribir código de placa y confiar en código bien probado.
Commons IO es parte del proyecto Apache Commons, que tiene como objetivo proporcionar a los desarrolladores un conjunto de bibliotecas comunes que pueden usar en su código diario. Commons IO ha existido desde 2004 y se ha actualizado regularmente para admitir nuevas características y correcciones de errores.
Algunos de los beneficios de usar Commons IO son:
Las principales características de Commons IO son:
| Paquete |
|---|
| Descripción |
|---|
| Este paquete define clases de utilidad para trabajar con secuencias, lectores, escritores y archivos. |
org.apache.commons.io.comparator |
| Este paquete proporciona varias implementaciones de comparación para archivos. |
org.apache.commons.io.file |
Este paquete proporciona extensiones en el reino de java.nio.file. |
org.apache.commons.io.filefilter |
Este paquete define una interfaz (IOFileFilter) que combina tanto FileFilter como FilenameFilter. |
La última versión de Commons IO es 2.7, que fue lanzado el 16 de octubre de 2020. Hay dos formas de descargar e instalar Commons IO 2.7 jar: desde el sitio web de Apache o desde Maven Central.
Antes de descargar e instalar Commons IO 2.7 jar, necesita tener los siguientes requisitos previos:
Para descargar Commons IO 2.7 jar desde el sitio web de Apache, siga estos pasos:
Si está usando Maven como su herramienta de compilación, puede descargar e instalar Commons IO 2.7 jar desde Maven Central agregando la siguiente dependencia a su archivo pom.xml:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>2.7</version> </dependency>
Maven descargará e instalará automáticamente el archivo jar y sus dependencias cuando ejecute su proyecto.
Se recomienda verificar la integridad de los archivos descargados utilizando firmas criptográficas o sumas de comprobación. Esto asegurará que los archivos no hayan sido manipulados o dañados durante la transmisión.
El sitio web de Apache proporciona firmas PGP y GnuPG o OpenSSL para verificar las firmas o las sumas de verificación.
gpg --verify commons-io-2.7-bin.zip.asc commons-io-2.7-bin.zip
Si la verificación es exitosa, verá un mensaje como este:
gpg: Signature made Vie 16 Oct 2020 10:32:50 AM PDT gpg: utilizando la clave RSA CBF9E9A8F6C4068F5B1B33B465E64C4FAA07F gpg: Buena firma de "Gary Gregory <ggre...@apache.org>" unknown[gpg:aka "Gary Gregory <ggre...@seagullsw.com>" [desconocido] gpg: aka "Gary Gregory <ggre...@seagullsoftware.com>" [desconocido] gpg: aka "Gary Gregory <garydg...@gmail.com>" [desconocido] gpg: ADVERTENCIA: Esta clave no está certificada con una firma de confianza! gpg: No hay indicación de que la firma pertenece al propietario. Cómo usar Commons IO en su proyecto Java
Una vez que haya descargado e instalado Commons IO 2.7 jar, puede comenzar a usarlo en su proyecto Java. Estos son algunos pasos a seguir:
Si está usando Maven como su herramienta de compilación, no necesita hacer nada más, ya que Maven agregará automáticamente Commons IO como una dependencia a su proyecto. Sin embargo, si no está usando Maven, debe agregar manualmente Commons IO a la carpeta classpath o biblioteca de su proyecto.
Puedes hacer esto copiando el "commons-io-2.7. jar" en la carpeta classpath o biblioteca de tu proyecto, o agregándolo como un tarro externo en tu IDE. Por ejemplo, en Eclipse, puede hacer clic derecho en su proyecto, seleccionar "Propiedades", luego "Java Build Path", luego "Bibliotecas", luego "Add External JARs", y navegar a la ubicación del archivo jar.
Para usar las clases IO de Commons en su código Java, primero debe importarlas. Puede importar clases o paquetes específicos, o usar un comodín (*) para importar todas las clases de un paquete.
import org.apache.commons.io.FileUtils;
O, para importar todas las clases desde el paquete org.apache.commons.io, puede usar la siguiente declaración:
import org.apache.commons.io. *;
Commons IO proporciona varias clases de utilidad que ofrecen métodos estáticos para tareas IO comunes. Algunas de las clases de utilidad más útiles son:
FileUtils: Esta clase proporciona métodos para leer, escribir, copiar, mover, eliminar y comparar archivos y directorios. IOUtils: Esta clase proporciona métodos para leer, escribir, copiar y cerrar flujos. FilenameUtils: Esta clase proporciona métodos para manipular nombres de archivos y rutas. EndianUtils: Esta clase proporciona métodos para convertir entre órdenes de bytes big-endian y little-endian. HexDump: Esta clase proporciona métodos para descargar datos en formato hexadecimal. Conjuntos de caracteres: Esta clase proporciona constantes para conjuntos de caracteres comunes. Por ejemplo, para copiar un archivo de una ubicación a otra usando FileUtils, puede usar el siguiente código:
// Copie el archivo de origen a destino Origen del archivo = nuevo archivo("C: Users user Documents source.txt"); Destino del archivo = new File("C: Users Documents destination.txt"); FileUtils.copyFile(source, destination); Commons IO también proporciona clases de entrada y salida que amplían la funcionalidad de las clases Java estándar. Algunas de las clases de entrada y salida más útiles son:
TeeInputStream: Esta clase le permite leer desde un flujo de entrada y escribir en uno o más flujos de salida al mismo tiempo. CountingInputStream: Esta clase cuenta el número de bytes leídos de un flujo de entrada. CountingOutputStream: Esta clase cuenta el número de bytes escritos en un flujo de salida. ClosedInputStream: Esta clase devuelve -1 cuando se lee. ClosedOutputStream: Esta clase no hace nada cuando se llama a write. NullInputStream: Esta clase proporciona un flujo de entrada que no tiene contenido. NullOutputStream: Esta clase proporciona un flujo de salida que descarta todos los datos. BoundedInputStream: Esta clase limita el número de bytes que se pueden leer desde un flujo de entrada. BoundedOutputStream: Esta clase limita el número de bytes que se pueden escribir en un flujo de salida. ChunkedInputStream: Esta clase decodifica datos escritos en formato fragmentado desde un flujo de entrada. ChunkedOutputStream: Esta clase codifica datos en formato fragmentado a un flujo de salida. SwappedDataInputStream: Esta clase lee datos de un flujo de entrada con un orden de bytes diferente al orden nativo. SwappedDataOutputStream: Esta clase escribe datos en un flujo de salida con un orden de bytes diferente al orden nativo. ProxyInputStream: Esta clase proporciona una clase base para implementar flujos de entrada proxy. ProxyOutputStream: Esta clase proporciona una clase base para implementar flujos de salida proxy. Por ejemplo, para contar el número de bytes leídos de un flujo de entrada usando CountingInputStream, puede usar el siguiente código:
Commons IO también proporciona filtros de archivos que implementan interfaces FileFilter y FilenameFilter. Estos filtros se pueden usar para filtrar archivos y directorios según varios criterios, como nombre, tamaño, fecha, extensión y más. Algunos de los filtros de archivos más útiles son:
NameFileFilter: Este filtro coincide con archivos y directorios por sus nombres. SizeFileFilter: Este filtro coincide con archivos y directorios por sus tamaños. DateFileFilter: Este filtro coincide con archivos y directorios por sus últimas fechas modificadas. ExtensionFileFilter: Este filtro coincide con los archivos por sus extensiones. PrefixFileFilter: Este filtro coincide con archivos y directorios por sus prefijos. SuffixFileFilter: Este filtro coincide con archivos y directorios por sus sufijos. RegexFileFilter: Este filtro coincide con archivos y directorios por una expresión regular. WildcardFileFilter: Este filtro coincide con archivos y directorios por un patrón comodín. AndFileFilter: Este filtro combina múltiples filtros usando una operación lógica AND. OrFileFilter: Este filtro combina múltiples filtros usando una operación OR lógica. NotFileFilter: Este filtro niega otro filtro usando una operación lógica NOT. TrueFileFilter: Este filtro siempre devuelve true. FalseFileFilter: Este filtro siempre devuelve false. DirectoryFileFilter: Este filtro solo coincide con directorios. FileFileFilter: Este filtro solo coincide con los archivos. HiddenFileFilter: Este filtro solo coincide con archivos y directorios ocultos. CanReadFileFilter: Este filtro coincide con archivos y directorios que solo se pueden leer. CanExecuteFileFilter: Este filtro coincide con archivos y directorios que solo se pueden ejecutar. EmptyFileFilter: Este filtro solo coincide con archivos y directorios vacíos. Por ejemplo, para listar todos los archivos de texto en un directorio usando ExtensionFileFilter, puede usar el siguiente código:
// Crear un filtro de archivos de extensión que acepte archivos txt ExtensionFileFilter txtFilter = new ExtensionFileFilter("txt"); // Listar todos los archivos de texto en un directorio File dir = new File("C: Users user Documents"); String[] txtFiles = dir.list(txtFilter); // Imprimir los nombres de los archivos de texto para (String txtFile : txtFiles) System.out.println(txtFile); Commons IO no es la única biblioteca que proporciona funcionalidad IO para desarrolladores Java. Hay algunas alternativas que puedes considerar, dependiendo de tus necesidades y preferencias. Algunas de las alternativas más populares son:
Files, ByteStreams, , CharStreams, Closer, y Resources. Guava es compatible con Java 8 o superior y funciona en diferentes plataformas. Guava es de código abierto y de uso gratuito bajo la licencia Apache 2.0.