从文件Java中读取错误的字符

时间:2013-10-22 10:26:53

标签: java

我通过跳过2次从文件中读取字符

     fis = new FileInputStream("C:/data/25130.in ");
     fis.skip(24305);//This position contains _(UnderScore)
     l=fis.read();
     fis.skip(24312);//This position also contains _(Underscore)
     i = fis.read();
     ch= (char)l;
     c = (char)i;
     System.out.print("Ch: "+ch);//Returns Underscore
     System.out.print("C: "+c); // Returns 9 instead of UnderScore

如果我删除了第一个跳过,如下所示

     fis = new FileInputStream("C:/data/25130.in ");         
     fis.skip(24312);//This position also contains _(underscore)
     i = fis.read();
     c = (char)i;
     System.out.print("C: "+c); // Now it returns Underscore

我打算在2个位置阅读2个字符。问题出在哪里

2 个答案:

答案 0 :(得分:2)

fis.skip(24312)跳过许多字符(它读取24312个字节并将它们扔掉......)

你想要做的是“定位”输入流,只扔掉(24312 - 24305)个字节,或fis.skip(7)

编辑:嗯,lutzh是对的,你想要fis.skip(6)但是......

你真正想做的是使用RandomAccessFile并使用搜索(位置)方法......

答案 1 :(得分:0)

我认为FileInputStream.skip没有到达给定位置,它会跳过给定的字节数。因此,在你的第二次跳过之后,你将最终得到48617,再加上你实际读过的一次。

尝试6作为第二次跳过的参数。