描述:对文本文件倒序转储,文本行顺序倒序,文字正序,保留原文件,新文件行顺序倒序
版本一
使用BufferedReader读取
可选择使用ArraryList进行内存存储及倒序操作,也可使用LinkedList头插法直接在List中达到想要的顺序,性能的话当然还是ArraryList快,看各自需求使用吧
使用BufferedWriter写入目标文件即可
缺点:
无法针对大数据量文件读取
容易造成oom
有兴趣可在idea中调整JVM堆属性感受一下
public class FileReadAndWrite {
public static final String PATH = "E:\\ideaworkspace\\yld_test\\pg_test\\src\\main\\resources\\";
public static void main(String[] args) throws IOException {
List<String> list = fileRead("test.txt");
fileWrite("rs.txt", list);
}
/**
* 读取文件
*
* @param name 读取文件名称
* @return list 按行逆序文件数据
* @throws IOException
*/
public static List<String> fileRead(String name) throws IOException {
//读取文件
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(PATH + name), "utf-8"));
String b = "";
List<String> list = new LinkedList<>();
while ((b = br.readLine()) != null) {
//头插法
((LinkedList<String>) list).addFirst(b);
}
System.out.println("读取成功");
return list;
}
/**
* 写入文件
*
* @param name 写入文件名称
* @param list 写入文件数据
* @throws IOException
*/
public static void fileWrite(String name, List<String> list) throws IOException {
//写入文件
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(PATH + name), "utf-8"));
for (String s : list) {
bw.write(s + "\n");
}
bw.flush();
System.out.println("写入成功");
}
}
版本二
针对大数据量GB级别,考虑到oom问题,那既然内存放不下我就找磁盘咯
对来源文件分片,