java文件排序 博客园_java.util.Arrays.sort两种方式的排序(及文件读写练习)

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

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

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, 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{

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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值