|
- /**
* i& [ ~) l4 P& D9 U) T. }! y, `6 r! r - * 简单读写文件类,有两个静态的读写方法
, U* U8 J" @$ I, m& G3 f% { - */9 i; X- C8 O) @- e( S8 _
- public class TextFile extends ArrayList<String> {
9 B8 {" w7 \$ S9 i4 T7 i4 k - /*4 e7 c& I7 D2 W7 ]3 i1 p
- * 功能:将指定文件读出转换为字符串: a" d3 p: U: S
- */+ m, {. P& y( M ^6 s
- public static String read(String fileName) {
1 r$ f( P1 Z9 z6 o7 D - StringBuilder sb = new StringBuilder();, D% b2 v6 ` e& [9 j
- try {
0 q% I S ~- R$ g& t7 G" T - // 读取字符文件8 x# N" i ?8 G0 Y
- BufferedReader in = new BufferedReader(new FileReader(new File(fileName)));
8 D4 w9 @9 w* d* g9 [% V& P F - // 为什么单独在这里加上try块而不是直接使用外边的try块?+ o' N0 ^! q4 ?$ K1 g
- // 需要考虑这么一种情况,如果文件没有成功打开,则finally关闭文件会出问题
6 p a& O- Z. {2 w) P' j+ H - try {
* \4 D% J5 c I. o8 ] - String s;
r/ j% ?! q k# i ^# {/ V1 o - while ((s = in.readLine()) != null) {' Y7 I4 S# C- z( {2 R
- sb.append(s + "\n");, R8 m. p( c( w
- }
$ Q* ]0 q, B3 |! t8 ~. J - }finally{
' y% C* }4 D) l4 B' r0 Z* o: Z - in.close();
3 v0 j4 ?9 d- I0 D - }+ N" k) }; Z' Y7 J8 [5 u. f+ b
- } catch (IOException e) {
3 D! s' z: t6 d7 W7 x - e.printStackTrace();' t$ J- k+ z5 b& c( B! h
- }& r7 o% ?' s' P
- return sb.toString();, k+ i, c% V$ n2 h# H4 O
- }
# w! m, d6 L; g9 j2 Q
}9 S; G j$ G$ _$ Y9 }$ B- /**
) p$ M* ^- l6 A8 s - *
# E; j% I" Y; b( h- ^1 E - * @param fileName 将要写入的文件名 S% m4 _( s5 x, ]
- * @param text 写入的文本
4 O0 Z6 ]- J1 D - */
, ^( e0 N3 R- V7 W: @ - public static void write(String fileName, String text){# i* f, t1 p+ x% n6 P
- try{
1 c$ V, h9 i# O$ ^ - PrintWriter p = new PrintWriter(new File(fileName));
3 f+ L% n$ P* L' e. U6 z - try{
- I4 e$ k7 j7 L: i, b - p.print(text);
7 @6 D& N2 s. A+ P+ m6 P$ L3 |( u - }finally {
6 k5 G( }: L7 ^, R - p.close();
: c v2 o# u9 `% D2 _# X- p) Y - }1 _- x5 U2 d$ P
- }catch (IOException e){
& S2 Q7 A ]3 H& e5 Q - throw new RuntimeException(e);
; q: f4 I% c9 B - }; a0 |) ]0 Q5 |6 `+ `
- }
# n; u+ R3 n, w7 [) k8 t- m - public TextFile(String fileName, String splitter){
# C8 f5 q, e: D+ Z5 K - // 将文件内容按指定形式分割后存放在ArrayList中' z: ~* N/ s( |% r3 N, I6 i
- super(Arrays.asList(read(fileName).split(splitter)));! ]7 v! @' c6 C5 o3 v! q
- if(get(0).equals("")) remove(0);% W) h& C6 F! v9 X$ P$ d
- }
! \8 N$ _9 T: _5 [8 W7 _ - // 默认按行分割
% i% G5 U" p1 Q" N [3 }% h( e - public TextFile(String fileName){
" w- n- P. E* T, d - this(fileName, "\n");
7 T d$ w x! v, G - }
4 o) }# ^3 o) v
+ G, o9 I* n9 \; S- /** 将本对象保存数据写入文件中. }, |6 X% G0 m& E2 Y; y6 Z N/ Q
- *
! ~, S: m& q4 b5 y9 n - * @param fileName 文件名( S& z4 C b) X$ u4 J
- */
' Y0 c5 `/ x; X# g8 E, q: A. I/ B - public void write(String fileName){# y3 D! O% `6 L+ l+ j; _
- try (9 P1 Y5 {0 n, t; c0 S0 y
- PrintWriter out = new PrintWriter(new File(fileName))) {
w' m% J* A8 I) ] - try{& `% U% r( j2 g6 A4 I
- for(String item : this){) X9 H, f! Z0 s( R1 e( [! p
- out.println(item);
" g1 N% s J0 v0 d - }3 h+ `4 j7 `# o0 ^% H
- }finally{5 @& G1 |. D9 P5 e
- out.close();
' ~. W: {4 z# T+ p7 l9 ^ - }
8 q0 ?: }' H; p* }: s, @ - }catch(IOException e){
- y# d) @$ ?- D8 e* P - throw new RuntimeException(e);5 o& b: k+ F1 h
- }
5 T. _% m+ f } - }6 c$ |% ^5 G1 `# G& [
- // 测试! D7 Q3 p4 S0 v
- public static void main(String[] args){
* E" L; Y, ]) g- e4 X - // TextFile tf = new TextFile();! W- M" F$ [( E3 A
- String str = read("./src/com/lrx/IO/TextFile.java");
5 B0 e) R) R: O# S; W7 I - write("test.txt", str);0 n& }: O6 X. K
- TextFile tf = new TextFile("test.txt");
8 W' s/ s" O" a4 ^ - tf.write("test2.txt");* v% k8 h! h. b/ X1 ?
- TreeSet<String> t = new TreeSet<String>(new TextFile("test2.txt","\\W+"));1 x- v4 w8 X; K& k
) o! K1 c3 e0 A6 R5 }8 i- System.out.println(t.headSet("a"));
/ @. }* u7 S. K& M1 a5 R - }' d6 [) R0 u+ n3 J# n6 B! k0 Q
- }$ R+ T3 N* e/ Q; q$ w4 b
- 1* P* M* I7 Y7 \' y W
- /**
( Z; n+ h1 @8 R' ^4 {0 U7 r - * 简单读写文件类,有两个静态的读写方法
" G% h! H0 A/ \3 W - */
5 R2 |* B( E& z5 | - public class TextFile extends ArrayList<String> {+ @; E4 M" }) ~( r- }6 j! x% i
- /*
+ x- ?3 O/ R/ D) b - * 功能:将指定文件读出转换为字符串7 Y' u$ `. H/ Q" b w s
- */
; d" F7 y! H2 J6 x, @1 K - public static String read(String fileName) {
( o: u. e6 _2 P6 r - StringBuilder sb = new StringBuilder();
G- F1 T" @- g6 b! r: c" C - try {6 R! Y. p! M7 I, @
- // 读取字符文件 Z& Q4 q+ i" B; J
- BufferedReader in = new BufferedReader(new FileReader(new File(fileName)));
' \% N/ i0 W( p6 l" E! G - // 为什么单独在这里加上try块而不是直接使用外边的try块?
, F) x+ ?( _4 p/ U4 E5 ?3 n8 a# B - // 需要考虑这么一种情况,如果文件没有成功打开,则finally关闭文件会出问题
+ j# M* o! E5 n5 w0 A - try {
- ]5 U- F& {, Y - String s;
Q: H% X7 { X; @9 A# S - while ((s = in.readLine()) != null) {5 M5 @7 B) V2 S4 z' J* _9 S! S
- sb.append(s + "\n");0 Y" v# W$ Y5 K/ s
- }: y" W0 v2 E0 z8 }/ i" ^: N
- }finally{7 O" B/ G, l9 u% j( N. c+ [
- in.close();
+ }' o8 d/ _5 v7 c: C5 i1 E$ L - }
; a0 j% N1 M( }( r2 J( c - } catch (IOException e) {
( h5 D# N$ s/ f, H! j - e.printStackTrace();- x/ {; S% f7 h
- }
8 f' p+ Y3 a6 z0 T) v - return sb.toString();! ^; c- z& A5 t! h1 E* C
- }
( l! z% G/ P" B
, z* s- F g5 m/ W5 B8 ~- /**
, U: g: c( l' V, z& s - *
, i2 L2 B- ?$ I% l/ c6 P f' b) k - * @param fileName 将要写入的文件名$ C, B- q2 R, h4 {4 x0 G* q/ v7 `; {
- * @param text 写入的文本; c; D7 J0 o2 |+ c. S4 |$ y: j
- */: Q) ~; Z# I, H0 G8 |/ d
- public static void write(String fileName, String text){; [6 W, b, J; j
- try{
0 h) J' e9 _& _0 V# E- d5 P - PrintWriter p = new PrintWriter(new File(fileName));
! Z6 _5 ^0 Y6 G$ v - try{
" A1 k: ^- D# P3 f; f0 U9 U8 I3 T3 x - p.print(text);9 j2 o, w6 R6 h* u2 q, i
- }finally {
) J4 M: e n; |9 G1 h, N - p.close();
3 C% p! @ `2 ]7 b) @- W4 f$ r- Z: B - }
" ]7 `/ {$ R; t6 J! |; s - }catch (IOException e){. ]0 ^0 g4 k5 l% A7 T
- throw new RuntimeException(e);
5 i% Z- b: V9 P, K - }, d1 y1 ~" N j9 X3 j) \$ V
- }3 `2 J6 E* B+ j2 u( [8 e
- public TextFile(String fileName, String splitter){9 g) y+ D$ I. h8 {- G% ~( m
- // 将文件内容按指定形式分割后存放在ArrayList中5 e6 C( o+ y9 F5 O; W( S
- super(Arrays.asList(read(fileName).split(splitter)));# ?+ k8 q! P; U+ m' d
- if(get(0).equals("")) remove(0);, b0 j# i/ Q; Q( `: f+ T/ P
- }
1 k3 |4 h2 U8 a. J$ t8 A - // 默认按行分割
* D9 b3 O5 N y( w" o1 @3 Q - public TextFile(String fileName){
+ J/ X0 G4 }) z# r& ?6 R9 T! z8 V - this(fileName, "\n");) {; k! a4 J$ }
- }2 r4 v( G4 _+ x& m% c9 Y' R
- & h' ~* K/ Q& A, L0 y& S
- /** 将本对象保存数据写入文件中
% q6 P& y1 J) V- T - *& o) I7 \* e& K# d+ m7 {8 V
- * @param fileName 文件名
- q; n8 @) A# P" q' J2 Z - */& C, E4 w% y k3 k" q9 q8 J1 D7 e: D
- public void write(String fileName){
2 H U+ a) J; o9 a - try (
$ P* x( y0 F. I# s2 H) G - PrintWriter out = new PrintWriter(new File(fileName))) {6 V: R! k! f6 I
- try{! N0 k! N( i+ g4 z. Y* G; E
- for(String item : this){7 k7 T3 q2 a. W3 i1 M9 `
- out.println(item);2 g& u4 f& ^9 `4 q
- }
( k4 o- ?2 E( q$ Y - }finally{
1 b" M a7 v0 ^5 T - out.close();
. E& a6 V o. k& \ - }
; z7 w$ s1 H1 _! L \ - }catch(IOException e){0 G* ]' {! u( v
- throw new RuntimeException(e);
6 f" W5 D+ |: b: r7 G! | - }
" \6 F; N) |0 `. e5 r7 P - }+ y' s8 W# L* q( s
- // 测试% |- J, Z- O7 m$ V
- public static void main(String[] args){" z) q& \0 [9 h( V& X/ G
- // TextFile tf = new TextFile();
$ Q9 n+ ?" b% i - String str = read("./src/com/lrx/IO/TextFile.java");' @5 N _: a; t5 x1 } x% ]
- write("test.txt", str);
, Z0 h" Z: Q: y* h& H - TextFile tf = new TextFile("test.txt");% i5 F, e8 O; P! ~
- tf.write("test2.txt");' V2 ~6 Z, ]4 S; V0 Z* x/ t
- TreeSet<String> t = new TreeSet<String>(new TextFile("test2.txt","\\W+"));
; @/ k: i% D* w+ Q! p( J; k
_% s$ a" O/ M t- System.out.println(t.headSet("a"));8 T& U; e) ]9 S; K: `& \
- }& z6 z1 U! l! R1 w$ P$ n" W2 X
- }8 d& s/ O5 S$ N; K6 e9 S8 Q
复制代码 |
|