日期:2014-05-20 浏览次数:20895 次
package com.pyh.demo1;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/**
* 有一个文本文件"c.txt"有多行内容
*
* 各行首部都包含一个行号和冒号
*
* 请按行号对各行进行排序
*
* 并在尾部写入冒号和本行字符数
*
* 然后保存在另一个文本文件"d.txt"之中。
*/
public class Demo1 {
/**
* 此方法是输入一个文件的路径,返回一个集合,集合里的每个元素就是文件中的每行内容
*/
public static List<Info> getInfo(String fileName) {
File file = new File(fileName);
if (file == null
------解决方案--------------------
file.length() < 1) {// 如果文件为空或没有内容,则返回null
return null;
}
List<Info> infos = new ArrayList<Info>();// 定义一个集合
Scanner scan = null;// 准备输入
try {
scan = new Scanner(file);
scan.useDelimiter("\r\n");// 设置一个分隔符
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String temp = null;
String[] arr = new String[2];
Info info = null;
while (scan.hasNext()) {// 循环读取内容
temp = scan.next();
arr = temp.split(":");// 将读取到的内容按“:”进行分割
info = new Info();// 实例化一个Info类,用于接收内容
info.setId(Integer.parseInt(arr[0]));// 设置编号
info.setInfo(arr[1]);// 设置内容
info.setCount(arr[1].length());// 设置内容的字符数,这里只是设置了内容的字符数,并不是本行的字符数
infos.add(info);// 增加到集合中
}
scan.close();// 关闭
return infos;
}
/**
* 给定一个集合和文件路径,此方法将集合里的内容写入到文件中
*/
public static void writeInfo(List<Info> infos, String fileName) {
PrintWriter out = null;// 准备输入
try {
out = new PrintWriter(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for (Info info : infos) {// 循环将内容写入到文件中
out.println(info.getId() + ":" + info.getInfo() + ":"
+ info.getCount());
}
out.close();// 关闭
}
public static void main(String[] args) {
String fileName = "./a.txt";
List<Info> infos = getInfo(fileName);// 读取内容
Collections.sort(infos);// 对集合进行排序
writeInfo(infos, "./b.txt");// 将集合里的内容写入文件
}
}
/**
* 一个临时类,主要用于记录编号,内容,字符数
*
* 实现Comparable接口是为了作排序比较的
*/
class Info implements Comparable<Info> {
private int id;// 编号
private String info;// 内容
private int count;// 字符数
public Info() {