Java InputStream 的读取方法没有读取前几个字节的问题
Problem with Java InputStream's read method not reading the first few bytes
所以,我写了一个简单的程序,它接收一个文本文件,并打算在不同的行中一个一个地输出文件中的字符。
以下是我正在使用的“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 你可以只使用 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);
}
下面的代码打印太多行,您的控制台有最大行数限制
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 中,这是我的问题 link:Can't show complete java result in Terminal unless resize it。
另外,请注意您的隐私保护,您可以在截图中遮盖姓名。
所以,我写了一个简单的程序,它接收一个文本文件,并打算在不同的行中一个一个地输出文件中的字符。
以下是我正在使用的“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 你可以只使用 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);
}
下面的代码打印太多行,您的控制台有最大行数限制
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 中,这是我的问题 link:Can't show complete java result in Terminal unless resize it。
另外,请注意您的隐私保护,您可以在截图中遮盖姓名。