BufferedReader 跳过第一行

Posted

技术标签:

【中文标题】BufferedReader 跳过第一行【英文标题】:BufferedReader to skip first line 【发布时间】:2014-06-07 19:06:48 【问题描述】:

我正在使用以下bufferedreader 来读取文件的行,

BufferedReader reader = new BufferedReader(new FileReader(somepath));
while ((line1 = reader.readLine()) != null) 

    //some code

现在,我想跳过读取文件的第一行,并且不想使用计数器行 int lineno 来记录行数。

如何做到这一点?

【问题讨论】:

为什么不阅读Line并忽略它? 在循环前调用reader.readLine() Skipping over the first line when reading a textfile 的可能重复项 @AndrewLogvinov 谢谢!我已经使用了您的方法,并且似乎是最有效的方法,请将其发布为答案。 【参考方案1】:

你可以试试这个

 BufferedReader reader = new BufferedReader(new FileReader(somepath));
 reader.readLine(); // this will read the first line
 String line1=null;
 while ((line1 = reader.readLine()) != null) //loop will run from 2nd line
        //some code
 

【讨论】:

简单。我怎么没想到呢? :D【参考方案2】:

您可以使用 Stream skip() 函数,如下所示:

BufferedReader reader = new BufferedReader(new FileReader(somepath));   
Stream<String> lines = reader.lines().skip(1);

lines.forEachOrdered(line -> 

...
);

【讨论】:

虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。 这个很完美。【参考方案3】:
File file = new File("path to file");
FileInputStream fis = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String line = null;
int count = 0;
while((line = br.readLine()) != null)  // read through file line by line
    if(count != 0)  // count == 0 means the first line
        System.out.println("That's not the first line");
    
    count++; // count increments as you read lines

br.close(); // do not forget to close the resources

【讨论】:

添加有关代码工作方式的 cmets 将帮助用户更好地理解您的代码。 希望我的代码现在使用 cmets 更加清晰。感谢您的警告;)【参考方案4】:

改用行号阅读器。

LineNumberReader reader = new LineNumberReader(new InputStreamReader(file.getInputStream()));
            String line1;
            while ((line1 = reader.readLine()) != null) 
            
                if(reader.getLineNumber()==1)
                    continue;
                
                System.out.println(line1);
            

【讨论】:

这很可能是解决这个问题的最低效和最复杂的方法。 @BrianRoach 为什么你认为 linenumberreader 过于复杂? 因为 A)没有必要,B)你在每次读取时都进行了不必要的比较。 A) 它使您可以控制跳过任何您希望的行。不限于第一行。 B)我在问题中没有看到任何与性能问题相关的评论。我希望用户一定会自定义解决方案,而不是复制粘贴。实际上,这里甚至不需要 InputstreamReader,fileReader 就可以了。我们是不是太固执己见了? 我的个人意见是,当你只需要一架双翼飞机时,为什么要建造航天飞机。您想跳过文件中的第一行。你有一个BufferedReader。在循环之前调用readLine()。完成。【参考方案5】:

您可以创建一个包含起始行值的计数器:

private final static START_LINE = 1;

BufferedReader reader = new BufferedReader(new FileReader(somepath));
int counter=START_LINE;

while ((line1 = reader.readLine()) != null) 
  if(counter>START_LINE)
     //your code here
  
  counter++;

【讨论】:

【参考方案6】:

你可以这样做:

BufferedReader buf = new BufferedReader(new FileReader(fileName));
            String line = null;
            String[] wordsArray;
            boolean skipFirstLine = true;


while(true)
                line = buf.readLine();
                if ( skipFirstLine) // skip data header
                    skipFirstLine = false; continue;
                
                if(line == null)  
                    break; 
                else
                    wordsArray = line.split("\t");

buf.close();

【讨论】:

以上是关于BufferedReader 跳过第一行的主要内容,如果未能解决你的问题,请参考以下文章

LOAD DATA LOCAL,如何跳过第一行?

使用 CSV 文件在循环中跳过第一行(字段)? [复制]

sh AWK跳过第一行

从串口写入数据时如何跳过第一行?

Python跳过第一行读取文件内容

numpy loadtxt 跳过第一行