简体   繁体   中英

Java - read text file starting from second line

I am trying to read a txt file in java. However, I only want to read starting from the second line since the first line is just a label. This is the example

Text File:

Name,Type,Price
Apple,Fruit,3
Orange,Fruit,2
Lettuce,Veggie,1

How do I do this? I have this code where you can read from first line.

Code:

//read the file, line by line from txt
File file = new File("train/traindata.txt");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;

line = br.readLine();

while(line != null)
{
    lines = line.split(",");

    //Do something for line here
    //Store the data read into a variable

    line = br.readLine();         
}

fr.close();

Please help me, Thank you in advance.

Just add an extra BufferedReader#readLine call...

br.readLine(); // consume first line and ignore
line = br.readLine();
while(line != null) ...

In case you are interested in using a third party library, here is an example using Apache Commons CSV (it will skip the header, but keep its mapping for retrieval of fields from the record).

Modify the charset according to your file's encoding.

   CSVParser parser = CSVParser.parse(file, Charset.forName("UTF-8"),CSVFormat.RFC4180.withFirstRecordAsHeader().withSkipHeaderRecord());

   List<CSVRecord> records = parser.getRecords();

   for (CSVRecord record : records) {

       System.out.println(record.get("Name"));
       System.out.println(record.get("Type"));
       System.out.println(record.get("Price"));
   }

Just do the following in while condition:

line = br.readLine();

while((line=br.readLine()) != null)
{
    lines = line.split(",");

    //Do something for line here
    //Store the data read into a variable

    line = br.readLine();         
}

fr.close();

I think you are converting txt file into CSV Parser

So I suggest you..

br.readLine(); // Header of CSV
line = br.readLine();
while(line != null)
{
 // Your Logic
} 

Just read and skip the first line

//read the file, line by line from txt
File file = new File("train/traindata.txt");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;

line = br.readLine();
boolean first = true;
while(line != null)
{
    if (first) {
      first = false;
    } else {
      lines = line.split(",");

      //Do something for line here
      //Store the data read into a variable

      line = br.readLine();         
    }
}

fr.close();

I propose a somehow different solution: ignoring lines without having a look into them ... of course works; but that approach is not very robust upon changes to your file content!

What happens if you change your files to have

header

data

or

data
data

So, my suggestion goes like this --- keep your current code, but ensure that you only pick lines with valid data; for example by reworking your loop body:

lines = line.split(",");
if (lines.length == 3 && isNumber(lines[2])) ...

where isNumber() is a little helper function that checks if the incoming string is well, a number.

In other words: skipping lines intentionally implicitly hard codes knowledge about the file layout into your "parser". That might be OK for simple exercises, but in the real world such things will break at some point in the future. And then the fun begins. Because nobody will remember that the parsing code is written to throw away the first line of the file.

And as shown, you can easily avoid that kind of problem!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM