题目:文件intel.txt,内容如下:
小王【空格】10000【回车】
小强【空格】12345【回车】
小张【空格】2342 【回车】
小强【空格】1030 【回车】
小周【空格】1020 【回车】
请编写一程序[color=red]从test.txt中读取数据,并按数字大小排序后写入另一文件sun.txt[/color](写入格式同上)
[color=blue]下面是自己编写的程序代码,小弟刚毕业所学有限所幸要求功能是实现了,然必定有不规范不合理之处还望大家多多指教修正!!(希望大家提供些更合理的排序)[/color]
------------------------------------------------------------------
import com.j2se.file.MyIntComparator;//自定义比较器
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.TreeMap;
/***
*读文件test.txt内容(文件内容格式: 小王【空格】10000【回车】
* 小强【空格】12345【回车】
*并对该文件内容按存款数排序,然后将其写入另一文件内
*
*****/
public class fileSort {
/*****
* 以行为单位读写文件
*@param fileName 源文件
*@param toFileName 目标文件
* ****/
public static void read_writeFile(String fileName,String toFileName){
File file = new File(fileName);
BufferedReader reader=null;
TreeMap<Integer,String> map = new TreeMap<Integer,String>(new MyIntComparator());
File toFile = new File(toFileName);
PrintWriter writer = null;
try{
System.out.println("------------------读文件开始-------------------------------");
System.out.println();
System.out.println("以行为单位读取文件内容,每次读取一整行");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
String[] ss = null;
int line = 1;
//一次读一行,直到读取为null
while((tempString = reader.readLine()) != null){
//显示行号
System.out.println("line number is "+line+"::"+tempString);
line++;
ss = tempString.split(" ");
int i = 0;
String value = ss[i];
int key =Integer.parseInt(ss[i+1]);
System.out.println("key is:"+key);
System.out.println("value is:"+value);
map.put(key, value);
}
System.out.println("------------------读文件结束-------------------------------");
System.out.println();
System.out.println("------------------写文件开始-------------------------------");
System.out.println("写文件开始:"+file.getAbsolutePath());
writer = new PrintWriter(new FileOutputStream(toFile));
if(map !=null){
Object key = null;
Object value = null;
// 使用迭代器遍历Map的键,根据键取值
Iterator it = map.keySet().iterator();
while (it.hasNext()){
key = it.next();
value = map.get(key);
System.out.println("key is :"+key);
System.out.println("vlaue is :"+value);
//能写各种基本类型数据
writer.print(value+" ");
writer.print(key+" ");
//换行
writer.println();
//写入文件
writer.flush();
}
System.out.println("写文件"+file.getAbsolutePath()+"成功!");
System.out.println("---------------------------写文件结束--------------------------");
}
}catch(IOException e){
e.printStackTrace();
}finally{
if(reader != null){
try{
reader.close();
}catch(IOException e1){
e1.printStackTrace();
}
}
if(writer !=null){
writer.close();
}
}
}
public static void main(String[] args){
String fileName = "D:/test.txt";
String toFileName = "D:/test1.txt";
fileSort.read_writeFile(fileName, toFileName);
}
}
----------------自定义比较器--------------------------------------
import java.util.Comparator;
/**
* 整数比较器,将整数按降序排列
*/
class MyIntComparator implements Comparator{
/**
* o1比o2大,返回-1;o1比o2小,返回1。
*/
public int compare(Object o1, Object o2) {
int i1 = ((Integer)o1).intValue();
int i2 = ((Integer)o2).intValue();
if (i1 < i2){
return 1;
}
if (i1 > i2){
return -1;
}
return 0;
}
}
小王【空格】10000【回车】
小强【空格】12345【回车】
小张【空格】2342 【回车】
小强【空格】1030 【回车】
小周【空格】1020 【回车】
请编写一程序[color=red]从test.txt中读取数据,并按数字大小排序后写入另一文件sun.txt[/color](写入格式同上)
[color=blue]下面是自己编写的程序代码,小弟刚毕业所学有限所幸要求功能是实现了,然必定有不规范不合理之处还望大家多多指教修正!!(希望大家提供些更合理的排序)[/color]
------------------------------------------------------------------
import com.j2se.file.MyIntComparator;//自定义比较器
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.TreeMap;
/***
*读文件test.txt内容(文件内容格式: 小王【空格】10000【回车】
* 小强【空格】12345【回车】
*并对该文件内容按存款数排序,然后将其写入另一文件内
*
*****/
public class fileSort {
/*****
* 以行为单位读写文件
*@param fileName 源文件
*@param toFileName 目标文件
* ****/
public static void read_writeFile(String fileName,String toFileName){
File file = new File(fileName);
BufferedReader reader=null;
TreeMap<Integer,String> map = new TreeMap<Integer,String>(new MyIntComparator());
File toFile = new File(toFileName);
PrintWriter writer = null;
try{
System.out.println("------------------读文件开始-------------------------------");
System.out.println();
System.out.println("以行为单位读取文件内容,每次读取一整行");
reader = new BufferedReader(new FileReader(file));
String tempString = null;
String[] ss = null;
int line = 1;
//一次读一行,直到读取为null
while((tempString = reader.readLine()) != null){
//显示行号
System.out.println("line number is "+line+"::"+tempString);
line++;
ss = tempString.split(" ");
int i = 0;
String value = ss[i];
int key =Integer.parseInt(ss[i+1]);
System.out.println("key is:"+key);
System.out.println("value is:"+value);
map.put(key, value);
}
System.out.println("------------------读文件结束-------------------------------");
System.out.println();
System.out.println("------------------写文件开始-------------------------------");
System.out.println("写文件开始:"+file.getAbsolutePath());
writer = new PrintWriter(new FileOutputStream(toFile));
if(map !=null){
Object key = null;
Object value = null;
// 使用迭代器遍历Map的键,根据键取值
Iterator it = map.keySet().iterator();
while (it.hasNext()){
key = it.next();
value = map.get(key);
System.out.println("key is :"+key);
System.out.println("vlaue is :"+value);
//能写各种基本类型数据
writer.print(value+" ");
writer.print(key+" ");
//换行
writer.println();
//写入文件
writer.flush();
}
System.out.println("写文件"+file.getAbsolutePath()+"成功!");
System.out.println("---------------------------写文件结束--------------------------");
}
}catch(IOException e){
e.printStackTrace();
}finally{
if(reader != null){
try{
reader.close();
}catch(IOException e1){
e1.printStackTrace();
}
}
if(writer !=null){
writer.close();
}
}
}
public static void main(String[] args){
String fileName = "D:/test.txt";
String toFileName = "D:/test1.txt";
fileSort.read_writeFile(fileName, toFileName);
}
}
----------------自定义比较器--------------------------------------
import java.util.Comparator;
/**
* 整数比较器,将整数按降序排列
*/
class MyIntComparator implements Comparator{
/**
* o1比o2大,返回-1;o1比o2小,返回1。
*/
public int compare(Object o1, Object o2) {
int i1 = ((Integer)o1).intValue();
int i2 = ((Integer)o2).intValue();
if (i1 < i2){
return 1;
}
if (i1 > i2){
return -1;
}
return 0;
}
}