Entonces, he escrito un programa simple, que recibe un archivo de texto y está destinado a generar los caracteres dentro del archivo uno por uno en líneas separadas.

A continuación se muestra el contenido del archivo de texto "hello.txt" que estoy usando:

Hello How Are You?

Aquí está mi código:

import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class input_stream {
    public static void main(String args[]) throws FileNotFoundException, IOException {
        InputStream input = new FileInputStream("C:\\Users\\m3hran\\Desktop\\file_test\\hello.txt");

        byte[] byteArray = new byte[1024];

        int ArraysRead = input.read(byteArray);

        input.close();

        System.out.println(ArraysRead);

        for (byte i : byteArray) {
            System.out.println ((char) i);
        }
    }
}

Mi problema es que mi salida parece estar saltando los primeros bytes por alguna razón; aquí está mi salida:

enter image description here

Me preguntaba si alguien sabe qué está causando este problema. ¡Cualquier ayuda sería apreciada!

0
m3hran 3 mar. 2021 a las 15:52

3 respuestas

La mejor respuesta

Al ejecutar el archivo por primera vez, obtuve el mismo resultado que el suyo que se publicó en cuestión, pero después de agrandar la Terminal y ejecutar el archivo nuevamente, el resultado se mostraría correctamente, que es el mismo que el del externo Terminal: ingrese la descripción de la imagen aquí

Parece ser un problema que podría colocarse en github y aquí está el enlace de mi problema: No se puede mostrar el resultado de Java completo en la Terminal a menos que se cambie su tamaño.

Además, preste atención a la protección de su privacidad y puede cubrir el nombre en sus capturas de pantalla.

1
Molly Wang 4 mar. 2021 a las 02:28

No debería haber problemas con su código, pero sugeriría usar try-with-resources e inicializar matrices con la longitud que realmente necesita

String filePath = "C:\\Users\\m3hran\\Desktop\\file_test\\hello.txt";
File file = new File(filePath);

try(FileInputStream fis = new FileInputStream(file)){
    
    byte[] bytes = new byte[(int) file.length()];
    int bytesRead = fis.read(bytes);
        
    for (byte i : bytes) {
        System.out.println((char) i);
    }

} catch (IOException e) {
    e.printStackTrace();
}

También desde Java7 puedes usar Files::readAllBytes

String filePath = "C:\\Users\\m3hran\\Desktop\\file_test\\hello.txt";
byte[] bytes = Files.readAllBytes(new File(filePath));
for (byte i : bytes) {
    System.out.println((char) i);
}
0
Dropout 3 mar. 2021 a las 14:02

El código siguiente imprime demasiadas líneas y su consola tiene un límite máximo de líneas

    for (byte i : byteArray) {
            System.out.println ((char) i);
        }

Tu podrías intentar

public static void main(String[] args) throws IOException{
        InputStream input = new FileInputStream("C:\\Users\\m3hran\\Desktop\\file_test\\hello.txt");

        byte[] byteArray = new byte[1024];

        int len = input.read(byteArray);

        input.close();

        System.out.println(new String(Arrays.copyOf(byteArray,len)));
    }

0
Nathan Drake 3 mar. 2021 a las 13:35