import java.io.*;
import java.util.*;
public class SortTest{
public static void main(String args[]) throws IOException, ClassNotFoundException {
FileReader InWord = new FileReader(new File("words.txt"));
BufferedReader in = new BufferedReader(InWord);
String ws[] = new String[100];
String input;
int index = 0;
while((input=in.readLine())!=null)
ws[index++]=input;
Arrays.sort(ws, 0, index); BufferedWriter out = new BufferedWriter(new FileWriter(new File("SortWords.txt"))); for(String s : ws){
if(s==null)
break;
System.out.println(s);
out.write(s, 0, s.length());
out.newLine();
}
in.close();
out.close(); myTest myArray[] = new myTest[20];
in = new BufferedReader(new FileReader(new File("words.txt")));
index=0;
while((input=in.readLine())!=null){
ws[index++]=input;
} for(int i=0; i<index; ++i){
String str[]=ws[i].split(" ");
myArray[i] = new myTest(Integer.parseInt(str[0]), str[1]);
/*
开始的时候是这样写的, 奥心死了, 作死的节奏啊.....半天没找出来哪里出现了空指针
myArray[i].x=Integer.parseInt(str[0]);
myArray[i].name=str[1];
*/
}
//1. 利用 自定义的 Comparator类中的compare 方法进行排序
Arrays.sort(myArray, 0, index, new myComparator());
//2. 利用 接口Comparable中的compareTo进行排序
//Arrays.sort(myArray, 0, index); DataOutputStream dOut = new DataOutputStream(new FileOutputStream(new File("SortWords.txt")));
for(myTest tmp : myArray){
if(tmp==null) break;
System.out.println(tmp.x + " " + tmp.name);
dOut.writeInt(tmp.x);
dOut.writeChar(' ');
dOut.writeChars(tmp.name);
dOut.writeChar('\n');
} //如果想要利用ObjectIputStream反串行化构造对象,就必须保证源文件已经是 利用ObjectOutputStream 写入的,否则出现错误
ObjectOutputStream ObjOut = new ObjectOutputStream(new FileOutputStream(new File("SortWords.txt")));
for(int i=0; i<index; ++i)
ObjOut.writeObject(myArray[i]);
//通过这种方法,可以避免ObjcetInputStream.readObject()中产生EOFException异常
//ObjOut.writeObject(null); index=0;
myTest inputTmp;
ObjectInputStream ObjIn = new ObjectInputStream(new FileInputStream(new File("SortWords.txt")));
try{
while((inputTmp=(myTest)ObjIn.readObject())!=null){
myArray[index++]=inputTmp;
}
}catch(IOException e){e.printStackTrace(); }finally{ ///放生的EOFException异常时IOException的子类
System.out.println("EOFException处理完毕!");
}
System.out.println("Finish!");
}
} class myTest implements Comparable<myTest>, Serializable{
int x;
String name;
public myTest(){}
public myTest(int x, String name){
this.x=x;
this.name=name;
} public int compareTo(myTest tmp){
if(x==tmp.x)
return name.compareTo(tmp.name);
else return x-tmp.x;
} private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
//in.defaultReadObject();
x=(int)in.readInt();
name=(String)in.readObject();
}
private void writeObject(ObjectOutputStream out) throws IOException{
//out.defaultWriteObject();
out.writeInt(x);
out.writeObject(name);
}
} class myComparator implements Comparator<myTest>{
public int compare(myTest o1, myTest o2){
if(o1.x==o2.x)
return o1.name.compareTo(o2.name);
else return o1.x - o2.x;
} public boolean equals(Object o1){
return true;
}
}

  

java.util.Arrays.sort两种方式的排序(及文件读写练习)的更多相关文章

  1. 对Java代码加密的两种方式,防止反编译

    使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...

  2. Java新建线程的两种方式

    Java新建线程有两种方式,一种是通过继承Thread类,一种是实现Runnable接口,下面是新建线程的两种方式. 我们假设有个竞赛,有一个选手A做俯卧撑,一个选手B做仰卧起坐.分别为两个线程: p ...

  3. 《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  4. (转)DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件)http://www.cnblogs.com/enterBeijingThreetimes/archive/2010/08/04/1792 ...

  5. 【转】DLL中导出函数的两种方式(dllexport与.def文件)

    DLL中导出函数的两种方式(dllexport与.def文件) DLL中导出函数的声明有两种方式: 一种方式是:在函数声明中加上__declspec(dllexport):另外一种方式是:采用模块定义 ...

  6. Java找N个数中最小的K个数,PriorityQueue和Arrays.sort()两种实现方法

    最近看到了 java.util.PriorityQueue.刚看到还没什么感觉,今天突然发现他可以用来找N个数中最小的K个数. 假设有如下 10 个整数. 5 2 0 1 4 8 6 9 7 3 怎么 ...

  7. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml第一种: Map map = new HashMap( ...

  8. Java实现深克隆的两种方式

    序列化和依次克隆各个可变的引用类型都可以实现深克隆,但是序列化的效率并不理想 下面是两种实现深克隆的实例,并且测试类对两种方法进行了对比: 1.重写clone方法使用父类中的clone()方法实现深克 ...

  9. java 实现websocket的两种方式

    简单说明 1.两种方式,一种使用tomcat的websocket实现,一种使用spring的websocket 2.tomcat的方式需要tomcat 7.x,JEE7的支持. 3.spring与we ...

随机推荐

  1. jetty9 安装部署更改端口号

    1.下载jetty 并解压到指定目录 2.更改默认端口号--在start.d中的http.ini中修改 3.启动服务 在jetty的根目录中输入命令 java -jar start.jar  服务就启 ...

  2. ORA-12705问题解决过程

    最近开发C#加ORACLE的程序,就有一台电脑连接的时候报错误 ORA-12705: Cannot access NLS data files or invalid environment speci ...

  3. FFmpeg 2.1 发布

    FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.它包括了目前领先的音/视频编码库 libavcodec. FFmpeg是在Linux下开发出来的,但它可以在包括W ...

  4. Ubuntu系统下的第一个console程序

    进入自己喜欢的目录,前面步骤和windows基本一致,只简单描述下 执行 dotnet new 然后执行 dotnet restore 然后执行 dotnet run 第一次未编译,会自动编译,然后可 ...

  5. WebAPI的一种单元测试方案

    大家是如何对webApi写测试的呢? 1.利用Fiddler直接做请求,观察response的内容. 2.利用Httpclient做请求,断言response的内容. 3.直接调用webApi的act ...

  6. 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求

    系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使 ...

  7. Log4Net指南

    英文好的直接看这里:http://www.codeproject.com/Articles/140911/log4net-Tutorial 介绍 log4net.是.NET下面最伟大的日志工具之一.简 ...

  8. C#高级二

    编程小虾米大侠之梦 软件环境:win7 开发工具:vs 2010 平台:.NET 语言:C# 类库版本:.NET Framework 2.0 语言特点:强类型语言 规划知识点: 1..net fram ...

  9. Effective Java 创建和销毁对象

    <Effective Java>阅读笔记,用适合自己理解的方式提炼该书内容.<Effective Java>是一本很实用的书,阅读方法应该是快速的领会,总结,然后应用.而非,一 ...

  10. Java-字符串练习

    1. 用自己的算法实现startsWith和endsWith功能. String str="dsjhajdl"; Scanner sc=new Scanner(System.in) ...