W3docs

Paquetes integrados de Java

Recorrido por los paquetes integrados más usados de Java: java.lang, java.util, java.io, java.nio, java.net, java.time.

El JDK incluye una extensa biblioteca estándar organizada en cientos de paquetes. Durante los primeros meses estarás recurriendo siempre a los mismos: java.lang, java.util, java.io, java.nio, java.net, java.time, java.math. Este capítulo es un recorrido: para qué sirve cada uno, las clases principales que contiene y cuándo elegirlo frente a sus vecinos.

java.lang — el paquete que nunca importas

java.lang se importa automáticamente en cada archivo fuente. Todo lo que contiene está disponible por su nombre simple sin necesidad de ninguna línea import:

  • Object, Class, String, StringBuilder — los tipos que todo programa utiliza.
  • Mathsqrt, min, max, random, las funciones trigonométricas.
  • Tipos envolventesInteger, Long, Double, Boolean, Character, Byte, Short.
  • Thread, Runnable, ThreadLocal — las primitivas de concurrencia originales.
  • Systemout, err, currentTimeMillis(), getenv, exit.
  • Throwable, Exception, RuntimeException, Error — toda la jerarquía de excepciones.
  • Iterable, Comparable, CharSequence, AutoCloseable — interfaces en las que el propio lenguaje se apoya para for-each, genéricos, try-with-resources y similares.

Si ves una clase usada sin un import, casi siempre proviene de aquí.

java.util — colecciones, utilidades y las antiguas clases de fecha

java.util es el paquete de uso diario. El framework de colecciones por sí solo es razón suficiente para conocerlo.

  • Interfaces de colección: Collection, List, Set, Map, Queue, Deque.
  • Implementaciones concretas: ArrayList, LinkedList, HashMap, LinkedHashMap, TreeMap, HashSet, TreeSet, ArrayDeque.
  • Clases de utilidad: Arrays (métodos para arrays), Collections (sort, unmodifiableList, ...), Objects (requireNonNull, hash).
  • Optional — para tipos de retorno que "podrían no tener valor".
  • Random, Scanner, UUID — utilidades comunes que verás en todas partes.
  • Las antiguas clases de fechaDate, Calendar, TimeZone. No las uses en código nuevo; utiliza java.time en su lugar.

java.util también tiene subpaquetes importantes que conviene conocer:

  • java.util.concurrentConcurrentHashMap, ExecutorService, Future, CompletableFuture, la caja de herramientas de concurrencia moderna.
  • java.util.stream — la API Stream para pipelines de estilo funcional.
  • java.util.function — interfaces funcionales: Function, Predicate, Supplier, Consumer, la familia utilizada por streams y lambdas.

java.io — streams clásicos

El paquete de I/O original, todavía en uso activo en todas partes aunque java.nio sea ahora el preferido para código nuevo.

  • Byte streams: InputStream, OutputStream, FileInputStream, FileOutputStream, BufferedInputStream, ByteArrayInputStream.
  • Character streams: Reader, Writer, FileReader, FileWriter, BufferedReader, InputStreamReader, PrintWriter.
  • File — la abstracción del sistema de archivos heredada.
  • Serialización: Serializable, ObjectInputStream, ObjectOutputStream.

La separación entre byte streams (InputStream/OutputStream) y character streams (Reader/Writer) es intencional: bytes para datos binarios, caracteres para texto con una codificación conocida.

java.nio — I/O moderno y rutas

"NIO" originalmente significaba "new I/O"; hoy en día es simplemente el paquete de I/O recomendado.

  • java.nio.file.Path — el reemplazo moderno de java.io.File.
  • java.nio.file.Files — helpers directos: Files.readString, Files.write, Files.walk, Files.exists.
  • java.nio.file.Paths — punto de entrada más antiguo; Path.of(...) hace lo mismo con menos código.
  • Buffers y canales: ByteBuffer, FileChannel, SocketChannel — bloques de construcción de bajo nivel para I/O de alto rendimiento.

Para código nuevo que lea un archivo, usa Files.readString(Path.of(...)), no BufferedReader con try-with-resources.

java.net — redes

URLs, sockets y HTTP.

  • URL, URI — análisis y representación de direcciones.
  • Socket, ServerSocket, DatagramSocket — TCP y UDP de bajo nivel.
  • InetAddress — IPs y resolución de nombres de host.

Java 11 añadió java.net.http.HttpClient, un cliente HTTP moderno con soporte asíncrono integrado en el JDK. Para código nuevo que realice peticiones HTTP, ese es el punto de partida correcto; no se necesita ninguna biblioteca de terceros.

java.time — fechas y horas correctamente

Añadido en Java 8 para reemplazar la defectuosa API Date / Calendar.

  • LocalDate, LocalTime, LocalDateTime — valores de reloj de pared, sin zona horaria.
  • ZonedDateTime, ZoneId — momentos con zona horaria.
  • Instant — un punto en la línea de tiempo global; el tipo ideal para almacenar en bases de datos.
  • Duration, Period — cantidades de tiempo (segundos frente a días/meses).
  • DateTimeFormatter — análisis y formateo.

Todos los tipos de java.time son inmutables y thread-safe. Eso por sí solo es razón suficiente para migrar cualquier código que todavía use java.util.Date.

java.math — aritmética de precisión

Cuando double y long no son suficientes:

  • BigInteger — enteros de precisión arbitraria; sin desbordamiento.
  • BigDecimal — aritmética decimal exacta con un modo de redondeo explícito; lo que necesitas para dinero.

MathContext y RoundingMode completan el paquete.

Otros que encontrarás

  • java.text — formateo más antiguo (NumberFormat, MessageFormat). Mayormente superado por java.time y String.format, pero todavía común en salidas localizadas.
  • java.security — hashing, firma digital; MessageDigest, KeyStore, Signature.
  • javax.crypto — cifrado simétrico y asimétrico.
  • java.sql — API JDBC.
  • javax.xml, org.w3c.dom, org.xml.sax — análisis de XML.

Los prefijos javax.* y org.* son históricos: javax fue originalmente para "extensiones" y los paquetes org.* provienen de organismos de estándares. Hoy son paquetes JDK normales como el resto.

Un ejemplo práctico

Este programa hace uso de java.util, java.util.stream, java.time y java.math en un solo lugar: una muestra de cómo se compone la biblioteca estándar.

java— editable, runs on the server

Imprime:

4 Jan 2026 -> $33.49
17 Jan 2026 -> $12.00
first sale was 28 days before 1 Feb 2026

Observa que los totales son exactos (BigDecimal no perdió ni un centavo), los días están agrupados en orden de calendario (el supplier TreeMap los ordenó) y la diferencia de fechas se calcula sin un solo cálculo manual de milisegundos. El mismo programa sería el doble de largo y más ruidoso con los equivalentes de Date/Calendar anteriores a Java 8 y double para el dinero. Elegir el paquete correcto es la mitad de la batalla.

Qué sigue

Ahora ya sabes qué hay en la biblioteca estándar. La última pieza de la historia de paquetes es cómo la JVM encuentra todas esas clases —las tuyas y las del JDK— en tiempo de compilación y ejecución. Continúa con el classpath de Java.

Práctica

Práctica
Un nuevo proyecto Java necesita manejar precios y fechas. ¿Qué paquetes deberías usar?
Un nuevo proyecto Java necesita manejar precios y fechas. ¿Qué paquetes deberías usar?
Was this page helpful?