对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
答案 0 :(得分:16)
这是我想出的:
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<String, String> map=new TreeMap<String, String>();
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
}
}
答案 1 :(得分:5)
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<String> rows = new ArrayList<String>();
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();
}
}
}
}
答案 2 :(得分:4)
这是一种非常懒惰的方式,因为你只是排序第一个词:
ArrayList<String> rows = new ArrayList<String>();
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();
答案 3 :(得分:3)
有一个包含3个参数的类:名称,动作和长度。
打开您的文件进行阅读,逐字阅读,为每个人创建一个新的类实例并填充适当的值,然后将该实例插入某个集合。
通过编写自己的排序方法或(更好的选项)使用Java排序函数之一对集合进行排序。
打开另一个文件进行编写,并将您的已排序集合写入同一个版本。
如果您无法将上述操作转换为代码,请购买“Core JAVA”一书并仔细阅读或希望此处有人慷慨并为您提供完整的代码。 :)
答案 4 :(得分:3)
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<String, String> map=new TreeMap<String, String>();
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
}
}
答案 5 :(得分:2)
使用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
答案 6 :(得分:1)
此解决方案使用Java 8 Stream API。
考虑Files.write
将Stream<CharSequence>
作为第二个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<CharSequence> sortedLines = Files.lines(initialFile).sorted().map(Function.identity());
Files.write(sortedFile, sortedLines::iterator, StandardOpenOption.CREATE);
}
}
答案 7 :(得分:0)
如果该文件中没有大量数据,请尝试以下方法:
将所有内容加载到
中String s = <<file contents>>;
String[] strings = s.split(<<here comes lovely regex something like \w+\s\w+\s\w>>);
Arrays.sort(strings);
for (String str : strings) {
write str to your output file;
}
但我太累了,无法提出更明智的事情......