这是我到目前为止所做的:
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程序员,并且会欣赏建议以及我应该采取的方向。
谢谢。
答案 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将数据写入输出文件。