首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

[100分]JAVA读取、处理txt文件并把结果写入新txt

2012-12-20 
[100分求助]JAVA读取、处理txt文件并把结果写入新txt本帖最后由 fanalin000 于 2012-07-23 10:36:17 编辑要

[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

SR 

SR 
END
START

SR 
END
START

SR 
END
START


SR 
END
START


SR 
END
START

SH 
SR 

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一下啦
[其他解释]

引用:
你既然可以对txt进行读取,那么你可以把这些数据一行一行的装进一个List里面,同时你又可以把每行的数据解析成一个数组,你这里可以根据空格进行分割就是一个数组了,这样的话,你只要循环这个数组,判断数组的第一个位置的值和第2个位置的值就可以

初学Java,还不了解List的用法,搜代码的时候曾经看过有用Map的,这两个一样吗?
[其他解释]

引用:
Java code

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;
im……

谢谢,参考代码学习一下。
------其他解决方案--------------------


 !id2temp.equals(id2)){
    buf.append("END");
    buf.append("\r\n");
    buf.append("START");
    buf.append("\r\n");
        
        id1temp = id1;
        id2temp = id2;
        }
        buf.append(id3);
        buf.append("\r\n");
        }

        buf.append("END");
        bw.write(buf.toString());
        bw.close();
        br.close();
    }


逻辑挺清楚的,楼主应该能看懂。
[其他解释]
引用:
Java code
    buf.append(line.split(" ")[2]);
            buf.append("\r\n");
            id1temp = line.split(" ")[0];
            id2temp = line.split(" ")[1];


id1temp = line.split(" ")[0];这个表示什么?

PS:代码是从第二行开始读数据的,我找了好半天也不知道应该在哪里改。。。
[其他解释]
这写都是基础了,你可以参考者API去看上面代码,主要 是java.lang包下String 这个类的方法
[其他解释]
引用:
这写都是基础了,你可以参考者API去看上面代码,主要 是java.lang包下String 这个类的方法

我明白split表示用后面的空格来切分数据,但是不清楚为什么表示第一列的[0]要写在后面,没找到对应的格式啊,你所说的lang包下也没有找到详细说明。

[其他解释]
Google下Tokenizer,写个切割字符串的方法把id1,id2切开来各存一个String,然后下面的存成list,ArrayList,数组啥都的行,取个SIZE或者LENGTH,按照那个做个循环匹配,匹配完,操作完再合上……要留啥就留啥……不要的就不合进去……
[其他解释]
为什么不用数据库呢?那样的话修改字段很简单的,对文件操作要修改字段的内容,有点复杂。。
[其他解释]
比较困难的一个问题。
[其他解释]
引用:
初学者,还不懂啊


慢慢来吧,先去理解 基础,然后参考别人代码
现看懂,然后多敲代码吧
[其他解释]
初学者,还不懂啊

热点排行