我正在尝试在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();
请帮助我,提前谢谢你。
答案 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 会记住解析代码被写入以丢弃文件的第一行。
如图所示,您可以轻松避免此类问题!