|
- /**
! r# q* x" S1 k5 L - * 简单读写文件类,有两个静态的读写方法
) F% }4 d9 _: K6 x% }3 `; \" H$ @$ o - */1 i+ d5 @3 q F D; G* O- o
- public class TextFile extends ArrayList<String> {) y: ^" u$ m; F
- /*, }! g) V2 l( D, m& O
- * 功能:将指定文件读出转换为字符串
9 e5 q* O* i$ i! m9 ~" ? - */
j( R) K+ @3 X, h& |7 V - public static String read(String fileName) {3 }1 |6 F# T% X! y+ S
- StringBuilder sb = new StringBuilder();( a- _- r' b) F5 H
- try {# A' a' r* P# Z4 k$ ~# T$ H6 }
- // 读取字符文件; ?: G+ i+ c4 T; f
- BufferedReader in = new BufferedReader(new FileReader(new File(fileName)));
) T# W/ |$ D, [% r& m% P' h - // 为什么单独在这里加上try块而不是直接使用外边的try块?5 @7 U& M- G1 w) a' E
- // 需要考虑这么一种情况,如果文件没有成功打开,则finally关闭文件会出问题' m R6 _8 k5 w* e* S# \% D' N$ s
- try {
( A9 g0 o8 F% D) D. E, J! s - String s;
3 x$ f& a1 e' s8 V. p% @ - while ((s = in.readLine()) != null) { X. ]" J9 K* |1 T: A! c0 Y9 R5 c
- sb.append(s + "\n");
% R4 c- Y" \3 Z2 V. @ - }
7 F7 A. ^+ X* C( L: v( d - }finally{- R8 Q. g- G" d
- in.close();
# r+ X/ C( y: f" T' V7 e0 B. p - }& \! N: Y/ N$ Y
- } catch (IOException e) {* |+ t; y6 u9 P; s% k& m
- e.printStackTrace();
e& f) g* x# R H- X5 P" v5 r2 y% _; d - }/ }! ]5 ~! i! J
- return sb.toString();
1 u: X+ z5 ?* c0 J# M$ D1 ? - }2 K2 ~& T; s; u! B7 L& B
$ N6 Y: j$ F8 o2 A3 S) g- /**
- z P) Q- C* S. `3 y Y2 m9 n4 y - *' e8 B/ Y% w' u% S
- * @param fileName 将要写入的文件名
: C- \( x! W+ C7 y0 X6 A - * @param text 写入的文本
U$ k" }+ ~- S" r4 P6 M' a - */
" ]% u9 [: }2 Y+ p* n6 Z - public static void write(String fileName, String text){, S; n H+ b, r- f$ I' r6 b2 B
- try{
. T3 Y6 P3 S; P& J& O' f' E M# B - PrintWriter p = new PrintWriter(new File(fileName));1 B. e! b$ _# y. y
- try{6 [& u. S4 H; V1 Q. ~
- p.print(text);
: _5 g/ @5 A4 X - }finally {
9 s6 ^ g/ q: Y% G+ T! i1 M - p.close();
k7 n8 u6 G R1 B - }
2 E; n5 M4 U5 s5 v - }catch (IOException e){3 @) T: k# ?8 R; A
- throw new RuntimeException(e);$ y/ C5 i1 H# J+ p, x% c" g. O
- }
) N `, I$ v# Q - }0 F2 Y# Q2 q5 v" X
- public TextFile(String fileName, String splitter){
0 K1 H/ k: L: Y; \; X; P0 a2 V - // 将文件内容按指定形式分割后存放在ArrayList中
& s$ M6 T* E+ m - super(Arrays.asList(read(fileName).split(splitter)));
$ W# g% a1 U) t - if(get(0).equals("")) remove(0);
8 e/ S! ^5 K* Z P p2 U) b - }
( s* \# c9 R1 Y3 O7 q) `% p - // 默认按行分割
% O. r- ?7 l. a - public TextFile(String fileName){
$ |7 ~2 o% v4 [% ~& d( D* X - this(fileName, "\n");% Y: Q! j& v/ Y1 C# ?
- }
% K0 m, D! d% L7 y9 Z) Z - % }0 b6 ?0 K7 ]* G" i
- /** 将本对象保存数据写入文件中
. E$ b j5 O$ ?9 p - *0 p2 _% R! G3 E! c
- * @param fileName 文件名# w& A& ]- c1 K
- */
% e1 n* K& F" Z* x- b! B' Q6 M - public void write(String fileName){
7 e4 A6 m9 @3 c: Z - try (" o8 _/ _3 w( d7 n1 K
- PrintWriter out = new PrintWriter(new File(fileName))) {- O8 ^& r. T S |& d6 v
- try{2 {6 C! q- x" X
- for(String item : this){+ i, y9 i+ U# V- j+ u$ z4 U
- out.println(item);$ u* Y Q5 J( v# K3 k- m- n6 E( ~
- }0 A# ~) h5 H V; h: u8 ~, ]5 x3 J
- }finally{
8 ]7 E) V- M# R" w1 s4 k; u - out.close();. e6 B: D1 R" m
- }
- G& `, P U( Z( x0 g' o( h+ s - }catch(IOException e){$ p/ A2 Q8 x: w) h
- throw new RuntimeException(e);
* y) [ W# [4 h- h" }; f% @ - }- g; x% M: }2 j+ k
- }0 d0 @2 n& z- j+ G7 J& Y
- // 测试
0 N r" a* z/ e& N4 U! f/ A" e3 M2 ^) B - public static void main(String[] args){
, `) E1 b% \, v& R - // TextFile tf = new TextFile();
) f% J% h, A8 F$ ?* b1 J8 x5 ?4 j5 c - String str = read("./src/com/lrx/IO/TextFile.java");. R# b2 l, ~. n
- write("test.txt", str);1 s6 Z3 w" H6 y. G# _9 @! `, R0 I
- TextFile tf = new TextFile("test.txt");
1 @2 n7 w- V4 D' W. x+ { - tf.write("test2.txt");
/ h+ [9 u% l- h# D; e2 }/ N' X; d" i - TreeSet<String> t = new TreeSet<String>(new TextFile("test2.txt","\\W+"));
$ C! m H+ g. ]4 Q' C - 6 T0 H( j8 @2 A9 b5 j' u
- System.out.println(t.headSet("a"));2 C- Z/ l& r3 s, \7 P
- }
7 D8 h, |/ c( O2 ~ - }
, p7 z( G0 n1 R0 v; U, U. w - 1! H8 \2 p: Q: K: U
- /**0 u- b# P0 X( ~8 Y, L) [
- * 简单读写文件类,有两个静态的读写方法, z- s( \% W9 `; | @; r
- */
/ S4 N1 @0 _/ n- f# s. S - public class TextFile extends ArrayList<String> {
/ C4 ]6 g" z+ F, j& h! Y! E! d# W - /*
3 x+ U6 R7 Z+ q! L4 Z) M - * 功能:将指定文件读出转换为字符串! C6 b0 m# m# d/ s1 X x
- */" h- {" t, D2 A1 `6 H, [: E
- public static String read(String fileName) {: X1 w9 N+ Z5 p- ^. A# u i& c
- StringBuilder sb = new StringBuilder();' \( V5 d# H6 a2 ^
- try {' a- b- v! F& R% q+ i
- // 读取字符文件
8 A! _" t8 b% J$ e - BufferedReader in = new BufferedReader(new FileReader(new File(fileName)));, E4 |; j3 M& n' [) y
- // 为什么单独在这里加上try块而不是直接使用外边的try块?
! A% P: ^% t1 j' X - // 需要考虑这么一种情况,如果文件没有成功打开,则finally关闭文件会出问题6 [8 q; @5 [- I: d8 y1 `
- try {+ h, ]9 M9 N1 Y& |
- String s;
) V! q) m6 W- e0 v$ l - while ((s = in.readLine()) != null) {3 f3 t9 [6 e3 W7 L
- sb.append(s + "\n");
: J( J+ K5 U2 T6 s/ ?) Y1 L0 |+ u - }
6 m% f; Q& Q% \( O3 n - }finally{
2 N K+ g( [0 @! G7 Q! w) B3 G; l - in.close();
P# U- O) G7 }5 z& L7 [. Z' c# a - }
3 D. C! [( m K X$ w - } catch (IOException e) {" _$ I+ X& V# X
- e.printStackTrace();
2 P3 C! m, _- s* \ - }
1 f5 p5 B/ q, I& A - return sb.toString();
- {5 A! Y6 z' N( [2 y) z - }/ Z% U }/ H$ |$ A% X/ z) |. P, }
- 8 ?* i& k, E' l5 }9 _2 s
- /**
E$ j% v0 n% ?2 z* T k' U - */ s! i# {0 m) I& S
- * @param fileName 将要写入的文件名
" Z( E- ~* k+ y4 K - * @param text 写入的文本' J$ C1 j" O3 O' k$ x- B7 U
- */
# W( X- j6 _8 Y3 u) x - public static void write(String fileName, String text){
/ M* C/ E- A) Y5 z$ t8 T* A - try{
6 _- M+ r7 L0 }; |( N - PrintWriter p = new PrintWriter(new File(fileName));% m" K$ ^% d( J9 [7 [" E- X
- try{
3 a+ F, v4 H1 z - p.print(text);% \; f; Y- p8 O; I' W( h; C& L
- }finally {
" F' \- W8 m. m. N( @7 u, v A - p.close();
, `! p$ ?" m* P+ c3 O! P$ P - }* G& _: A7 K. h2 Q& w# _
- }catch (IOException e){
$ }8 ^: x$ q) ] - throw new RuntimeException(e);
6 v7 _% X# L* t) ]3 B8 l - }2 r4 u1 w0 s: h0 @" M( Q0 F
- }, F k6 F x X" Q3 r) i
- public TextFile(String fileName, String splitter){
6 p7 _/ A: B. v2 C# a- ] - // 将文件内容按指定形式分割后存放在ArrayList中# w* _7 X; y( ?! Y7 u
- super(Arrays.asList(read(fileName).split(splitter)));: C$ `0 d3 M) G/ J% c
- if(get(0).equals("")) remove(0);
/ Y+ b2 [4 T ?- S - }
" Y% j" F1 v3 ]' i' B - // 默认按行分割4 l3 j4 e$ j! J' {/ C: w4 t
- public TextFile(String fileName){% }! B! _* X% V3 l! m' n$ X
- this(fileName, "\n");
3 S# [4 }! b% [- p- e' E/ U - }3 u" d0 }8 x/ A% j9 Y
0 C) u+ q3 M; S3 a* h1 J! b- /** 将本对象保存数据写入文件中
n2 T/ C8 S5 F. ?. M2 B* G( l1 b - *5 O6 k5 W" M% D4 C, t' A p
- * @param fileName 文件名
& q2 q) {# l7 s( ~ - */' }" @8 L& {0 D1 o# F
- public void write(String fileName){# {4 l, `0 e! I* @5 w, y5 f
- try (0 J" z% r% `, N2 X4 {
- PrintWriter out = new PrintWriter(new File(fileName))) {
/ c- ] G$ ` B) ~. I( ] - try{& `8 B9 f8 V: b# O6 y) d
- for(String item : this){ Z0 b( H" v2 L
- out.println(item);
3 Y; V6 _0 Q' n - }
5 a0 ^1 G8 o: n2 w. B% | - }finally{/ K: l! r0 k7 E% i3 E$ J
- out.close();
& I* {: `1 r8 @% X) `! g; t2 I) j - }3 r3 p, b9 I" W( H% V
- }catch(IOException e){5 e4 Q' h! U- {! L( L
- throw new RuntimeException(e);, d- k! e2 W. b' t# ~ T ]
- }
5 y2 N2 f5 W* I3 y6 a# D - }
# C y5 \( y7 _# U - // 测试
$ ]7 R# L% ?8 K+ e! h& f. U* \ - public static void main(String[] args){& C9 ~- O' f. U3 |# H- [: l
- // TextFile tf = new TextFile();" r1 Y+ l/ N1 m2 v
- String str = read("./src/com/lrx/IO/TextFile.java");
7 Z/ H( z( B! W( Y7 V- k: H4 c0 i# [ - write("test.txt", str);
8 x- h8 u) T _7 j! u2 f2 ]2 i - TextFile tf = new TextFile("test.txt");4 z0 q8 |, I' R8 {2 Z; F
- tf.write("test2.txt");* f6 b, h" Z3 O: U# o1 v+ [0 m
- TreeSet<String> t = new TreeSet<String>(new TextFile("test2.txt","\\W+"));( F$ J( w) `6 w" S
- * ?4 l9 b9 N9 a* F2 _, T: [6 r( Z
- System.out.println(t.headSet("a"));
. `$ f' ?3 \0 E4 A0 t# h9 l& _ - }7 S* } t" v2 f0 {% I
- }, q0 X0 m+ T, E% h
复制代码 |
|