我试图创建一个程序,将两个不同的文本文件合并为第三个文件,该文件按升序排序。这是两个文件中的内容
档案1:12 23 34 45 56 67 69 123 133
档案2:4 5 10 20 35 44 100 130 150 160 180
这是我到目前为止的代码:
try
{
FileReader file1=new FileReader("D://School//text1.txt");
Scanner scan = new Scanner(new File("D://School//text1.txt"));
ArrayList<Integer> values = new ArrayList<Integer>();
Collections.sort(values); //sorting the values
while(scan.hasNextInt()) values.add(scan.nextInt());
FileReader file2=new FileReader("D://School//text2.txt");
scan = new Scanner(new File("D://School//text2.txt"));
values = new ArrayList<>();
Collections.sort(values); //sorting the values.
while(scan.hasNextInt()) values.add(scan.nextInt());
BufferedReader br1 = new BufferedReader (file1);
BufferedReader br2 = new BufferedReader(file2);
String temp1 = "";
String temp2 = "";
while(br1.readLine() !=null)
{
temp1=br1.readLine()+temp1;
}
while(br2.readLine()!=null)
{
temp2=br2.readLine()+temp2;
}
String temp = temp1 + temp2;
FileWriter fw=new FileWriter("D://School//text3.txt");
char buffer[]=new char[temp.length()];
temp.getChars(0,temp.length(),buffer,0);
fw.write(buffer);
file1.close();
file2.close();
fw.close();
}
catch (IOException e)
{
e.printStackTrace();
}
到目前为止,程序将能够读取和写入第三个文件中的正确内容,但是,它不能按升序排序。
以下是程序将打印到第三个文件的内容
12 23 34 45 56 67 69 123 133 4 5 10 20 35 44 100 130 150 160 180
我希望将其排序到第三个文件中
4 5 10 12 20 23 34 35 44 45 56 67 69 100 123 130 133 150 160 180
提前致谢:)
答案 0 :(得分:1)
我建议您使用TreeSet,我在您的代码中看到了一些问题。
TreeSet<Integer> treeSet = new TreeSet<Integer>();
while(scan.hasNextInt()) treeSet.add(scan.nextInt());
scan = new Scanner(new File("D://School//text2.txt"));
//Do not new Collection!!!!!
while(scan.hasNextInt()) treeSet.add(scan.nextInt());
你可以为每个集合
for (Integer i : treeSet) {
System.out.println(i);
}
如果你有jdk8,你可以试试这个。
ArrayList<Integer> ints = new ArrayList<>();
Files.readAllLines(Paths.get("D://School//text1.txt"), StandardCharsets.UTF_8).forEach(x -> Arrays.asList(x.split(" ")).stream().forEach(y -> ints.add(Integer.parseInt(y))));
Files.readAllLines(Paths.get("D://School//text2.txt"), StandardCharsets.UTF_8).forEach(x -> Arrays.asList(x.split(" ")).stream().forEach(y -> ints.add(Integer.parseInt(y))));
Collections.sort(ints);
StringBuilder sb = new StringBuilder();
ints.stream().map(x -> x + " ").forEach(sb::append);
Files.write(Paths.get("D://School//text3.txt"),sb.toString().getBytes(),StandardOpenOption.WRITE,StandardOpenOption.CREATE);
答案 1 :(得分:0)
当您致电Collections.sort(values);
时,您正在对空ArrayList
进行排序。
将所有值添加到Collections.sort(values);
后,您需要致电ArrayList
。
您可以运行这些示例进行测试:
示例1 :
List<Integer> values = new ArrayList<Integer>();
// sort the list first
Collections.sort(values);
values.add(5);
values.add(3);
values.add(8);
values.add(1);
System.out.println(values);
输出:[5,3,8,1]
示例2 :
List<Integer> values = new ArrayList<Integer>();
values.add(5);
values.add(3);
values.add(8);
values.add(1);
// sort the list now
Collections.sort(values);
System.out.println(values);
输出:[1,3,5,8]