如何使用Java对文本文件中的记录进行排序?

对txt文件中的数据进行了一些修改。 我已经尝试了建议的代码,但我没有成功地用这种格式在txt文件中再次写它。我尝试了collection.sort但是它用长线写了数据。

我的txt文件包含以下数据:

Monday Jessica Run 20mins Alba Walk 20mins Amy Jogging 40mins Bobby Run 10mins Tuesday Mess Run 20mins Alba Walk 20mins Christy Jogging 40mins Bobby Run 10mins 

如何按升序对这些数据进行排序,并在排序后将其再次存储在txt文件中?

 Monday Alba Walk 20mins Amy Jogging 40mins Bobby Run 10mins Jessica Run 20mins Tuesday Alba Walk 20mins Bobby Run 10 mins Christy Jogging 40mins Mess Run 20mins Jessica Run 20mins 

这是我想出来的:

 import java.io.*; import java.util.*; public class Sort { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new FileReader("fileToRead")); Map map=new TreeMap(); String line=""; while((line=reader.readLine())!=null){ map.put(getField(line),line); } reader.close(); FileWriter writer = new FileWriter("fileToWrite"); for(String val : map.values()){ writer.write(val); writer.write('\n'); } writer.close(); } private static String getField(String line) { return line.split(" ")[0];//extract value you want to sort on } } 

这是一种非常懒惰的方式,因为你只是排序第一个单词:

  ArrayList rows = new ArrayList(); BufferedReader reader = new BufferedReader(new FileReader("input.txt")); String s; while((s = reader.readLine())!=null) rows.add(s); Collections.sort(rows); FileWriter writer = new FileWriter("output.txt"); for(String cur: rows) writer.write(cur+"\n"); reader.close(); writer.close(); 
 package com.myFiles; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; public class FilesReaderWriter { public static void main(String[] args) throws IOException { BufferedReader reader = null; PrintWriter outputStream = null; ArrayList rows = new ArrayList(); try { reader = new BufferedReader(new FileReader("Input.txt")); outputStream = new PrintWriter(new FileWriter("Output.txt")); String file; while ((file = reader .readLine()) != null) { rows.add(file); } Collections.sort(rows); String[] strArr= rows.toArray(new String[0]); for (String cur : strArr) outputStream.println(cur); } finally { if (reader != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } } } 

有一个包含3个参数的类:Name,Action和length。

打开文件进行阅读,逐字阅读,为每个人创建一个新的类实例并填充适当的值,然后将该实例插入到某个集合中。

通过编写自己的排序方法或(更好的选项)使用Java排序函数之一对集合进行排序。

打开另一个文件进行编写,并在同一个版本中编写已排序的集合。

如果您无法将上述操作转换为代码,请购买“Core JAVA”一书并阅读它或者希望此处有人能够慷慨并为您提供完整的代码。 🙂

 import java.io.*; import java.util.*; public class Sort1 { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new FileReader("fileToRead.txt")); Map map=new TreeMap(); String line=""; while((line=reader.readLine())!=null){ map.put(getField(line),line); } reader.close(); BufferedWriter writer = new BufferedWriter(new FileWriter("fileToWrite1.txt")); for(String val : map.values()){ writer.write(val); writer.newLine(); } writer.close(); } private static String getField(String line) { return line.split(" ")[0];//extract value you want to sort on } } 

使用sort

 aaron@ares ~$ sort data.txt Alba Walk 20mins Amy Jogging 40mins Bobby Run 10mins Jessica Run 20mins aaron@ares ~$ sort data.txt > sorted.txt aaron@ares ~$ cat sorted.txt Alba Walk 20mins Amy Jogging 40mins Bobby Run 10mins Jessica Run 20mins 

…或使用python

 aaron@ares ~$ python -c "import sys; print ''.join(sorted(sys.stdin))" < data.txt > sorted.txt aaron@ares ~$ cat sorted.txt Alba Walk 20mins Amy Jogging 40mins Bobby Run 10mins Jessica Run 20mins 

如果该文件中没有大量数据,请尝试以下方法:

将其所有内容加载到

 String s = <>; String[] strings = s.split(<>); Arrays.sort(strings); for (String str : strings) { write str to your output file; } 

但我太累了,无法提出更明智的事情……

此解决方案使用Java 8 Stream API。

考虑到Files.writeStream作为第二个arg,因此我们需要通过map(Function.identity())进行类型转换。

 import java.io.IOException; import java.nio.file.*; import java.util.function.Function; import java.util.stream.Stream; public class FileSortWithStreams { public static void main(String[] args) throws IOException { Path initialFile = Paths.get("files/initial.txt"); Path sortedFile = Paths.get("files/sorted.txt"); Stream sortedLines = Files.lines(initialFile).sorted().map(Function.identity()); Files.write(sortedFile, sortedLines::iterator, StandardOpenOption.CREATE); } }