您的位置:首页 > 其它

关于读取数据流文件时吞掉每行第一个字符的错误

2013-12-21 01:28 267 查看
在做一个解析pacp文件的时候需要读取文件中的每个属性,但是每次读出来的内容的每一行的第一个字符都被吞掉了,找了半天不知道为什么,后来看到在读取的时候用的read()方法,而且返回值是int类型,在变量初始化的时候默认应该是0,可能就这样把第一个给吞了(还是象不太清楚),read只会读取一个字节 不会自动读取下一个 只会读第一个字节 和指针不是一回事,但是如果使用readLine()函数就不会出现这种情况了,

当然这只是在使用inputStream的时候会出现这种情况,如果直接使用FileReader则这种问题就不会出现,使用read同样会把第一个字符读入,也可能是buffer在作怪,而且可能性很大,如果不使用buffer直接用FIleReader也是可以完全读入的,但是如果是使用buffer,并且使用int 返回值的read,那么必然会产生吞掉第一个字符的后果,具体代码贴出,如下:

package com.zaj;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class ReadLine {

public static void readline(String file, String writerfile) {
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter(writerfile); // 写文件操作,把得到的file对应的文件中内容写入,writerfile中去。
//System.out.println(fw.getEncoding());//utf-8默认
BufferedWriter bw = new BufferedWriter(fw);

String readoneline;
int l;
while ((l = br.read()) != -1) {  //此时会产生吞掉第一个字符的后果
readoneline = new String(br.readLine().getBytes(),"utf-8");
//System.out.println(readoneline);

/*String l;
while ((l = br.readLine()) != null) {  //若使用readLine()则毫发无损
readoneline = new String(br.readLine().getBytes(),"utf-8");
//System.out.println(readoneline);
*/
bw.write(readoneline);
bw.newLine();
System.out.println(readoneline);
}
bw.flush();
br.close();
bw.close();
br.close();
fw.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
readline("D:\\TDDOWNLOAD\\test\\packWifi.pcap", "D:\\TDDOWNLOAD\\test\\packWifi.txt");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: