Pregunta Java: leer más allá del final de un archivo

2 min de lectura

Piensa la respuesta antes de abrirla. Todas las opciones parecen razonables, y casi siempre hay un detalle que lo cambia todo.

Pregunta Java · IO

Suponiendo que tienes los permisos de lectura y escritura, ¿cuál es el resultado de compilar y ejecutar el siguiente código? ¿Y por qué?

import java.io.*;

public class Prueba {
  public static void main(String[] args)
          throws FileNotFoundException, IOException {
    OutputStream out = new FileOutputStream("/archivo.txt");
    out.write(123);
    out.close();
    InputStream input = new FileInputStream("/archivo.txt");
    System.out.println(input.read() + " " + input.read());
    input.close();
  }
}
  1. imprime "123 0"
  2. imprime "123 -1"
  3. imprime "123 null"
  4. se lanza una excepción en tiempo de ejecución.
Ver la respuesta

Respuesta: 2.

java Prueba123 -1

write(123) escribe un solo byte, con el valor 123. El primer read() lo devuelve, y el segundo ya no tiene nada que leer: read() devuelve -1 al llegar al final del archivo. No lanza una excepción, y tampoco puede devolver null, porque devuelve un int.

Por eso read() devuelve un int y no un byte: necesita un valor más, -1, que no se pueda confundir con ningún byte (0 a 255).

La imagen original no llevaba la línea import java.io.*;, y sin ella el código no compila. Lo de «suponiendo que tienes permisos» importa: escribir en /archivo.txt, en la raíz, solo funciona como administrador. Con un usuario normal da FileNotFoundException: /archivo.txt (Permission denied), y por eso esta ejecución se hizo como root.

Pregunta publicada en 2013 y revisada en octubre de 2026. La respuesta se comprobó compilando y ejecutando el código con Java 25 LTS en un contenedor limpio; las salidas están copiadas de esa ejecución.

7 comentarios en «Pregunta Java: leer más allá del final de un archivo»

  1. La opción correcta es la 2, porque input.read() nos devuelve el byte 123 como entero; en este caso al introducir el int (entero) 123, que se encuentra en el rango 0 – 255 de byte no hay ningún problema y luego al no encontrar otro byte, el método input.read() nos devuelve -1. Por eso el resultado es: 123 -1

    Claramente el enunciado menciona que se tienen permisos de lectura escritura sobre el archivo.

    Responder

Deja un comentario