使用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()一次只能读取一个字节,但我没有得到任何地方。

+0

请出示输入和预期的输出。 – Sybren

+0

文本文件的内容被声明为abcdefgh。预期的输出将是从a到h的字母以及读取每个字母所花费的时间。 –

+1

另外,不要认为每个字节都是字符。只有使用一些编码才是真实的。例如,UTF-8是错误的。使用阅读器阅读字符。流是用于字节的。 –

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

+0

谢谢澄清。就是这样。很明显,欢呼! –

变化

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

如果你看到你的输出,那么你会看到,因为你是在循环中,而状态读取两次,一次表明您已经阅读替代字符,一次打印。

+0

这段代码仍然有完全相同的问题。 – EJP

+0

@EJP - 我从问题的代码中解释了什么是错的。请阅读完整的答案。 –

你可以使用这个它会帮助你

​​