Java - 从第二行开始读取文本文件

时间:2016-10-19 14:24:47

标签: java csv io

我正在尝试在java中读取txt文件。但是,我只想从第二行开始阅读,因为第一行只是一个标签。这是示例

文字档案:

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

我该怎么做?我有这个代码,你可以从第一行阅读。

代码:

//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();

请帮助我,提前谢谢你。

6 个答案:

答案 0 :(得分:11)

只需添加额外的BufferedReader#readLine来电...

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

答案 1 :(得分:3)

如果您对使用第三方库感兴趣,以下是使用Apache Commons CSV的示例(它将跳过标题,但保留其映射以便从记录中检索字段)。

根据文件的编码修改字符集。

   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"));
   }

答案 2 :(得分:1)

在条件中执行以下操作:

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();

答案 3 :(得分:1)

我认为您正在将txt文件转换为CSV分析器

所以我建议你......

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

答案 4 :(得分:0)

阅读并跳过第一行

//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();

答案 5 :(得分:0)

我提出了一个不同的解决方案:忽略线条而不去看它们......当然有效;但是在更改文件内容时,这种方法不是很强大!

如果您将文件更改为

,会发生什么
header

data

data
data

所以,我的建议是这样的 - 保留你当前的代码,但要确保你只选择带有有效数据的行;例如,通过重新处理循环体:

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

其中 isNumber()是一个小辅助函数,用于检查传入的字符串是否正确,是否为数字。

换句话说:有意隐含地将硬代码关于文件布局的知识跳到“解析器”中。这对于简单的练习来说可能没问题,但是在现实世界这样的事情在未来的某个时刻打破。然后开始有趣。因为 nobody 会记住解析代码被写入以丢弃文件的第一行。

如图所示,您可以轻松避免此类问题!