日期:2014-05-20  浏览次数:20864 次

各位大侠们,能不能帮我看一下这道题怎么做,俺是新手
各位大侠们,能不能帮我看一下这道题怎么做,俺是新手
题:
Java编程size]
有一个文本文件"c.txt"有多行内容,各行首部都包含一个行号和冒号,请按行号对各行进行排序,并在尾部写入冒号和本行字符数,然后保存在另一个文本文件"d.txt"之中。
 比如:文件"c.txt"内容格式如下:
2: 教育部高校科研管理方法研讨会暨青委会西北片区成立大会在西安举行
4: 第14届亚洲地区英语语言测试研讨会在西安举行 
3: 法国巴黎南十一大学代表团访问西安
1: 西安召开创先争优活动总结大会
 

------最佳解决方案--------------------

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 
------其他解决方案--------------------
还是不行呀,对了,用的是JDK在DOS下运行的,不知道有影响没?
------其他解决方案--------------------
 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;// 编号