使用FileInputStream从文件中读取文本
我有一个文本文件,其中的内容abcdefgh保存在我的计算机上。我想使用FileInputStream在我的控制台上显示字符,同时还要测量完成所需的时间。它看起来像这样:使用FileInputStream从文件中读取文本
public class Readtime {
public static void main(String args[]) throws Exception{
FileInputStream in=new FileInputStream("bolbol.txt");
while(in.read()!=-1){
long startTime = System.nanoTime();
int x = in.read();
long endtime = System.nanoTime();
System.out.println(endtime-startTime);
System.out.println((char)x);
}
in.close();
}
}
什么我得到的控制台上如下:
8863
b
7464
d
6998
f
6997
h
现在在哪里字母的休息吗?就好像只有4个读操作完成了。我的想法是朝着字符大小的方向发展,并且read()
一次只能读取一个字节,但我没有得到任何地方。
while(in.read()!=-1){
long startTime = System.nanoTime();
int x=in.read();
您正在阅读在循环while条件和打印数据再次读取
int i=0;
while((i=in.read())!=-1){
System.out.println((char)i);
}
您可以查看官方文档here
谢谢澄清。就是这样。很明显,欢呼! –
变化
while(in.read()!=-1){
到
int x;
while((x=in.read())!=-1){
和删除
int x=in.read();
你读两次..和打印备用时间..这就是为什么字符缺失
每次in.read();被称为文件的下一个字符被读取。所以你必须在循环迭代中读取一次字符。
int i=0;
while((i=in.read())!=-1){
System.out.println((char)i);
i=in.read();
}
如果你看到你的输出,那么你会看到,因为你是在循环中,而状态读取两次,一次表明您已经阅读替代字符,一次打印。
这段代码仍然有完全相同的问题。 – EJP
@EJP - 我从问题的代码中解释了什么是错的。请阅读完整的答案。 –
你可以使用这个它会帮助你
请出示输入和预期的输出。 – Sybren
文本文件的内容被声明为abcdefgh。预期的输出将是从a到h的字母以及读取每个字母所花费的时间。 –
另外,不要认为每个字节都是字符。只有使用一些编码才是真实的。例如,UTF-8是错误的。使用阅读器阅读字符。流是用于字节的。 –