1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
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
;
}
}
|