bufferedReader 读取文件第一行第一个字符丢失问题

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

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

复制代码
 1 package com.zaj;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.FileReader;
 6 import java.io.FileWriter;
 7 import java.io.IOException;
 8 
 9 public class ReadLine {
10     
11 
12     public static void readline(String file, String writerfile) {
13         try {
14             FileReader fr = new FileReader(file);
15             BufferedReader br = new BufferedReader(fr);            
16             FileWriter fw = new FileWriter(writerfile); // 写文件操作,把得到的file对应的文件中内容写入,writerfile中去。
17             //System.out.println(fw.getEncoding());//utf-8默认
18             BufferedWriter bw = new BufferedWriter(fw);
19             
20             String readoneline;
21             int l;            
22             while ((l = br.read()) != -1) {  //此时会产生吞掉第一个字符的后果
23                 readoneline = new String(br.readLine().getBytes(),"utf-8");
24                 //System.out.println(readoneline);
25                 
26             /*String l;            
27             while ((l = br.readLine()) != null) {  //若使用readLine()则毫发无损
28                 readoneline = new String(br.readLine().getBytes(),"utf-8");
29                 //System.out.println(readoneline);
30                 */
31                 bw.write(readoneline);
32                 bw.newLine();
33                 System.out.println(readoneline);
34             }
35             bw.flush();
36             br.close();
37             bw.close();
38             br.close();
39             fw.close();
40             fr.close();
41         } catch (IOException e) {
42             e.printStackTrace();
43         }
44     }
45 
46     public static void main(String[] args) {
47         readline("D:\\TDDOWNLOAD\\test\\packWifi.pcap", "D:\\TDDOWNLOAD\\test\\packWifi.txt");
48     }
49 }
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用中的描述,BufferedReader.readLine()读取第一行会出现bug,首行第一个字符会是一个空字符。解决方法是去掉第一行第一个字符。引用中提供了以下代码示例来解决该问题: ``` String str =is.readLine(); char s =str.trim().charAt(0); //65279是空字符 if(s==65279){ if(str.length()>1){ str=str.substring(1); } } ``` 另外,引用也提供了一种解决办法,即在读取每一行时使用for循环来跳过第一行的读取和判断。示例代码如下: ``` for (int i = 0; i < 10; i++) { String str = br.readLine(); System.out.println(str); } ``` 综上所述,你可以使用上述解决方法来解决BufferedReader读取不到第一行问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [BufferedReader.readLine()读取文件第一行会出现bug,首行第一个字符会是一个空字符...](https://blog.csdn.net/yuan8606/article/details/84484305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [QA_java BufferedReader.readLine_出现第一个字符无法读取的问题](https://blog.csdn.net/OwemShu/article/details/121420713)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值