zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    字符编码
    IO流技术
    TreeMap使用和Comparable比较
    Collections工具类
    使用迭代器进行遍历时
    238. 除自身以外数组的乘积
    python 字典按键、值排序
    collections.Counter用法
    442. 数组中重复的数据
    1395. 统计作战单位数
  • 原文地址:https://www.cnblogs.com/inyu/p/13659096.html
Copyright © 2011-2022 走看看