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
|
public
static
void
main(String[] args)
throws
Exception {
File file =
new
File(
"E:/a.txt"
);
// 100M
long
start = System.currentTimeMillis();
String lastLine = readLastLine(file,
"gbk"
);
long
delt = System.currentTimeMillis() - start;
System.out.println(lastLine);
System.out.println(
"读取时间(毫秒):"
+ delt);
file =
new
File(
"E:/b.txt"
);
// 仅一行文字
start = System.currentTimeMillis();
lastLine = readLastLine(file,
"gbk"
);
delt = System.currentTimeMillis() - start;
System.out.println(lastLine);
System.out.println(
"读取时间(毫秒):"
+ delt);
}
public
static
String readLastLine(File file, String charset)
throws
IOException {
if
(!file.exists() || file.isDirectory() || !file.canRead()) {
return
null
;
}
RandomAccessFile raf =
null
;
try
{
raf =
new
RandomAccessFile(file,
"r"
);
long
len = raf.length();
if
(len == 0L) {
return
""
;
}
else
{
long
pos = len -
1
;
while
(pos >
0
) {
pos--;
raf.seek(pos);
if
(raf.readByte() ==
'\n'
) {
break
;
}
}
if
(pos ==
0
) {
raf.seek(
0
);
}
byte
[] bytes =
new
byte
[(
int
) (len - pos)];
raf.read(bytes);
if
(charset ==
null
) {
return
new
String(bytes);
}
else
{
return
new
String(bytes, charset);
}
}
}
catch
(FileNotFoundException e) {
}
finally
{
if
(raf !=
null
) {
try
{
raf.close();
}
catch
(Exception e2) {
}
}
}
return
null
;
}
|
本文转自wauoen51CTO博客,原文链接:http://blog.51cto.com/7183397/1860508
,如需转载请自行联系原作者