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<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; } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。