Java InputStream出现问题';s read方法不读取前几个字节

Java InputStream出现问题';s read方法不读取前几个字节,java,visual-studio-code,inputstream,Java,Visual Studio Code,Inputstream,因此,我编写了一个简单的程序,它接收一个文本文件,并在单独的行上逐个输出文件中的字符 下面是我正在使用的“hello.txt”文本文件的内容: Hello How Are You? 这是我的密码: import java.io.InputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class input_stre

因此,我编写了一个简单的程序,它接收一个文本文件,并在单独的行上逐个输出文件中的字符

下面是我正在使用的“hello.txt”文本文件的内容:

Hello How Are You?
这是我的密码:

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);
        }
    }
}
我的问题是,出于某种原因,我的输出似乎跳过了前几个字节-以下是我的输出:


我想知道是否有人知道是什么导致了这个问题?任何帮助都将不胜感激

您的代码应该没有问题,但我建议使用try with resources并使用实际需要的长度初始化数组

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();
}
同样,在Java7中,您只需使用
文件::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);
}

下面的代码打印太多行,并且您的控制台有最大行数限制

    for (byte i : byteArray) {
            System.out.println ((char) i);
        }
你可以试试

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)));
    }


第一次运行文件时,我得到的结果与您的相同,这是有问题的post,但在放大终端并再次运行文件后,结果将正确显示,与外部终端中的结果相同:

这似乎是一个可以放在github中的问题,下面是我的问题链接:


此外,请注意您的隐私保护,您可以在截图中包含姓名。

我怀疑这是您的全部输出。当然
System.out.println(ArraysRead)也打印了一个数字,这可能有助于解释打印的字节。我只是手动编译了程序,并使用CMD运行它,它显示了整个输出的大小写,包括读取的字节数。VS代码没有显示完整输出有什么原因吗?当我在VS代码中运行程序时,我包含的屏幕截图是整个输出。VS代码通常有一个可滚动和可调整大小的输出窗口。也许你只需要向上滚动或调整输出窗口的大小。我这里的情况似乎不是这样,但谢谢你的帮助。只要我知道我的代码能按预期工作就行了。既然可以使用标准库中的
文件。readAllLines()
,为什么还要使用外部库呢?当然,这只是一个习惯,
文件::readAllBytes
也会起作用,去替换它。。谢谢你的提醒。@daniu然而
文件。readAllBytes
是Java9,而Apache Commons是Java7,但我想他不会被迫使用某个JDKNope,
文件
也是Java7。事实上(在检查时发现),它甚至有一个方法。@daniu I站更正