从文本文件中读取和分析数据 - 大问题

时间:2015-03-25 16:47:38

标签: java serialization io filewriter

这是我到目前为止所做的:

public class test1 {

public static void main(String args[]) throws IOException {
    BufferedReader br = null;
    BufferedWriter bw = null;


        br = new BufferedReader(new FileReader("IRStudents.txt"));
        bw = new BufferedWriter(new FileWriter("File_2.txt"));
        String line = br.readLine();



    for (int i = 1; i <= 10 && line != null; i++) {
        bw.write(line);
        bw.newLine();
        bw.write("- - - - - - - - - - -");
        bw.newLine();

        line = br.readLine();
    }


        System.out.println("Lines are Successfully copied!");

        br.close();

        bw.close();
    }

}

所以现在将文本写入新的文本文档。格式如下:(用户ID名称)

25987 Alan
- - - - - -
25954 Betty
- - - - - -

现在我得到了另一个带有UserID和Marks的文件,其布局如下:

25220 68.7
25987 51.5
25954 22.2 

现在我想让Java为分析UserID并将标记与特定名称合并并标记它与之关联起来。例如,这就是它最终应该是什么样子。

25987 Alan
Marks: 51.5
- - - - - - 
25954 Betty
Marks: 22.2
- - - - - - 

现在我知道这有很多要求并且不期望完整的代码解决方案,但我是一个非常新的java程序员,并且会欣赏建议以及我应该采取的方向。

谢谢。

3 个答案:

答案 0 :(得分:1)

执行此操作(使用小数据集)的方法是存储一个文件的数据并合并数据,同时读取其他文件,如下面的代码所示(毕竟你确实获得了完整的解决方案)) 哦,请注意,如果您打算使用大型数据集,您可能希望使用数据库。我的代码不会列出没有标记的用户(尽管你可以很容易地解决这个问题)

代码:(此代码假设有一个名为IRStudents.txt的文件和一个名为Marks.txt的文件)

public static void main(String[] args) throws IOException{
    //declare reader and writer
    BufferedReader reader = null;
    PrintWriter writer = null;

    //hash map to store the data of the first file
    Map<String, String> names = new HashMap<String, String>();

    //read the first file and store the data
    reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("IRStudents.txt"))));
    String line;
    String[] arg;
    while((line = reader.readLine()) != null){
        if(!line.startsWith("-")){
            arg = line.split(" ");
            names.put(arg[0], arg[1]);
        }
    }
    reader.close();

    //read the second file, merge the data and output the data to the out file
    writer = new PrintWriter(new FileOutputStream(new File("File_2.txt")));
    reader = new BufferedReader(new InputStreamReader(new FileInputStream(new File("Marks.txt"))));
    while((line = reader.readLine()) != null){
        arg = line.split(" ");
        writer.println(arg[0] + " " + names.get(arg[0]));
        writer.println("Marks: " + arg[1]);
        writer.println("- - - - - -");
    }
    writer.flush();
    writer.close();
    reader.close();
}

希望这会有所帮助:)

答案 1 :(得分:0)

我认为你应该看一下&#39; RandomAccessFile&#39; tha java.io包中的类。它允许您指定文件指针,将您带到现有文本文件中的任何点进行读取或写入,这似乎是您想要做的。

编辑:我看到你想在单独的文件中输出合并数据。在这种情况下,接受的答案就足够了。我以为你想修改你现有的文件来添加中间行

以下是文档:http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html

答案 2 :(得分:0)

您可以使用三个字段(UID,名称和标记)创建一个类Student,然后使用带有整数(UID)的HashMap作为键,将Student作为值。

使用它,读取第一个文件并插入带有名称集的Student的HashMap实例,然后读取第二个文件并使用UID在HashMap中查找相应的学生来设置标记。

最后迭代HashMap将数据写入输出文件。