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

Reading and Analysing data from text file - Big issue

这是我目前拥有的:

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 程序员,非常感谢您的建议和我应该采取的方向。

谢谢。

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

编辑:我看到您想将合并后的数据输出到一个单独的文件中。在那种情况下,接受的答案就足够了。我在想你想修改你现有的文件以添加行 mid-text

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

您可以创建一个 class 具有三个字段(UID、名称和标记)的 Student,然后使用以 Integer (UID) 作为键、Student 作为值的 HashMap。

这样,读取第一个文件并在HashMap中插入Student的实例并设置名称,然后读取第二个文件并使用UID在HashMap中找到相应的学生以设置标记。

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

这样做的方法(使用小数据集)是存储一个文件的数据并在读取另一个文件的同时合并数据,就像我下面的代码一样(毕竟你确实得到了一个完整的解决方案:)) 哦,请注意,如果您要处理庞大的数据集,您可能希望改用数据库。而且我的代码不会列出没有标记的用户(尽管你可以很容易地解决这个问题)

代码:(此代码假设有一个名为 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();
}

希望对您有所帮助:)