[100分求助]JAVA读取、处理txt文件并把结果写入新txt
本帖最后由 fanalin000 于 2012-07-23 10:36:17 编辑 要用Java写个东西读取txt中的数据,若id1或者id2的值不同,就插入END,START(详细见结果),最后只输出修改后的id3列。我对java不熟,读入txt和写出新txt还是能自己弄的,但是不会比较id1的值或者id2的值,请大家帮忙,最好带注释,谢谢
源文件:
id1 id2 id3
100037 1 Q
100037 1 SR
100037 1 Q
100037 1 SR
100039 1 Q
100039 1 SR
100044 1 Q
100044 1 SR
100048 1 Q
100048 1 Q
100048 1 SR
100048 2 Q
100048 2 Q
100048 2 SR
100078 1 Q
100078 1 SH
100078 1 SR
100078 1 Q
希望得到的结果:
START
Q
SR
Q
SR
END
START
Q
SR
END
START
Q
SR
END
START
Q
Q
SR
END
START
Q
Q
SR
END
START
Q
SH
SR
Q
END
[最优解释]
package com.li;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Set;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader buf = new BufferedReader(new InputStreamReader(new FileInputStream(new File("e:/1.txt"))));
String temp = "";
Set<Text> texts = new TreeSet<Text>();
while((temp=buf.readLine())!=null){
Text text= new Text(temp);
texts.add(text);
}
for (Text text : texts) {
System.out.println("START\n"+text.getContent()+"\nEND");
}
}
}
class Text implements Comparable<Text>{
private String content =null;
private String header = null;
public Text(String content){
setContent(content);
this.header = content.split(" ")[0];
this.content = content.split(" ")[2];
}
@Override
public int compareTo(Text o) {
if(header.equals(o.getHeader())){
o.setContent(o.getContent()+"\n"+content);
return 0;
}else return 1;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
}
public static void main(String[] args) throws Exception {
FileReader fr = new FileReader("d:\\from.txt");
BufferedReader br = new BufferedReader(fr);
StringBuffer buf = new StringBuffer();
FileWriter fw = new FileWriter("d:\\to.txt");
BufferedWriter bw = new BufferedWriter(fw);
String line = null;
br.readLine();
String id1temp = "";
String id2temp = "";
if((line = br.readLine()) != null){
buf.append("START");
buf.append("\r\n");
buf.append(line.split(" ")[2]);
buf.append("\r\n");
id1temp = line.split(" ")[0];
id2temp = line.split(" ")[1];
}
while((line = br.readLine()) != null){
String[] ids = line.split(" ");
String id1 = ids[0];
String id2 = ids[1];
String id3 = ids[2];
if(!id1temp.equals(id1)
[其他解释]
你既然可以对txt进行读取,那么你可以把这些数据一行一行的装进一个List里面,同时你又可以把每行的数据解析成一个数组,你这里可以根据空格进行分割就是一个数组了,这样的话,你只要循环这个数组,判断数组的第一个位置的值和第2个位置的值就可以
[其他解释]
line.split(" ") 是一个数组
line.split(" ")[0] 是取这个数组的第一个元素。
文件第一行是 id1 id2 id3
从第二行开始才是数据
100037 1 Q
100037 1 SR
.........
.........
所以从第二行开始计算
[其他解释]
自己顶,求指导
[其他解释]
该回复于2012-07-23 10:39:53被版主删除
[其他解释]
楼上的兄弟,很清楚。不行,再GOOGLE一下啦
[其他解释]