从文本文件中读取和分析数据——大问题
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();
}
希望对您有所帮助:)
这是我目前拥有的:
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();
}
希望对您有所帮助:)