????? 注意:當你寫文件的時候,為了提高效率,寫入的數據會先放入緩沖區,然后寫入文件。因此有時候你需要主動調用flush()方法。與上面對應的寫文件的方法為:
1?FileWriter?fw?=?new?FileWriter("hello.txt");
2?String?s?=?"hello?world";
3?fw.write(s,0,s.length());
4?fw.flush();
5?OutputStreamWriter?osw?=?new?OutputStreamWriter(new?FileOutputStream("hello2.txt"));
6?osw.write(s,0,s.length());
7?osw.flush();
8?PrintWriter?pw?=?new?PrintWriter(new?OutputStreamWriter(new?FileOutputStream("hello3.txt")),true);
9?pw.println(s);

不要忘記用完后關閉流!下面是個小例子,幫助新手理解。其實有的時候java的IO系統是需要我們多記記的,不然哪天就生疏了。
?1?import?java.io.*;
?2?public?class?TestFile2
?3?{
?4?public?static?void?main(String[]?args)?throws?IOException
?5?{
?6?FileReader?fr?=?new?FileReader("ming.txt");
?7?char[]?buffer?=?new?char[1024];
?8?int?ch?=?0;
?9?while((ch?=?fr.read())!=-1?)
10?{
11?System.out.print((char)ch);
12?}
13?  InputStreamReader?isr?=?new?InputStreamReader(new?FileInputStream("ming.txt"));
14?while((ch?=?isr.read())!=-1)
15?{
16?System.out.print((char)ch);
17?}
18?  BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(new?FileInputStream("ming.txt")));
19?String?data?=?null;
20?while((data?=?br.readLine())!=null)
21?{
22?System.out.println(data);
23?}
24?  FileWriter?fw?=?new?FileWriter("hello.txt");
25?String?s?=?"hello?world";
26?fw.write(s,0,s.length());
27?fw.flush();
28?  OutputStreamWriter?osw?=?new?OutputStreamWriter(new?FileOutputStream("hello2.txt"));
29?osw.write(s,0,s.length());
30?osw.flush();
31?  PrintWriter?pw?=?new?PrintWriter(new?OutputStreamWriter(new?FileOutputStream("hello3.txt")),true);
32?pw.println(s);
33?  fr.close();
34?isr.close();
35?br.close();
36?fw.close();
37?osw.close();
38?pw.close();
39?}
40?}

java中多種方式讀文件
一、多種方式讀文件內容。
?? 1、按字節讀取文件內容
?? 2、按字符讀取文件內容
?? 3、按行讀取文件內容
?? 4、隨機讀取文件內容

??1?import?java.io.BufferedReader;
??2?import?java.io.File;
??3?import?java.io.FileInputStream;
??4?import?java.io.FileReader;
??5?import?java.io.IOException;
??6?import?java.io.InputStream;
??7?import?java.io.InputStreamReader;
??8?import?java.io.RandomAccessFile;
??9?import?java.io.Reader;
?10?public?class?ReadFromFile?{
?11?/**
?12?*?以字節為單位讀取文件,常用于讀二進制文件,如圖片、聲音、影像等文件。
?13?*?@param?fileName?文件的名
?14?*/
?15?public?static?void?readFileByBytes(String?fileName){
?16?File?file?=?new?File(fileName);
?17?InputStream?in?=?null;
?18?try?{
?19?System.out.println("以字節為單位讀取文件內容,一次讀一個字節:");
?20?//?一次讀一個字節
?21?in?=?new?FileInputStream(file);
?22?int?tempbyte;
?23?while((tempbyte=in.read())?!=?-1){
?24?System.out.write(tempbyte);
?25?}
?26?in.close();
?27?}?catch?(IOException?e)?{
?28?e.printStackTrace();
?29?return;
?30?}
?31?try?{
?32?System.out.println("以字節為單位讀取文件內容,一次讀多個字節:");
?33?//一次讀多個字節
?34?byte[]?tempbytes?=?new?byte[100];
?35?int?byteread?=?0;
?36?in?=?new?FileInputStream(fileName);
?37?ReadFromFile.showAvailableBytes(in);
?38?//讀入多個字節到字節數組中,byteread為一次讀入的字節數
?39?while?((byteread?=?in.read(tempbytes))?!=?-1){
?40?System.out.write(tempbytes,?0,?byteread);
?41?}
?42?}?catch?(Exception?e1)?{
?43?e1.printStackTrace();
?44?}?finally?{
?45?if?(in?!=?null){
?46?try?{
?47?in.close();
?48?}?catch?(IOException?e1)?{
?49?}
?50?}
?51?}
?52?}
?53?/**
?54?*?以字符為單位讀取文件,常用于讀文本,數字等類型的文件
?55?*?@param?fileName?文件名
?56?*/
?57?public?static?void?readFileByChars(String?fileName){
?58?File?file?=?new?File(fileName);
?59?Reader?reader?=?null;
?60?try?{
?61?System.out.println("以字符為單位讀取文件內容,一次讀一個字節:");
?62?//?一次讀一個字符
?63?reader?=?new?InputStreamReader(new?FileInputStream(file));
?64?int?tempchar;
?65?while?((tempchar?=?reader.read())?!=?-1){
?66?//對于windows下,rn這兩個字符在一起時,表示一個換行。
?67?//但如果這兩個字符分開顯示時,會換兩次行。
?68?//因此,屏蔽掉r,或者屏蔽n。否則,將會多出很多空行。
?69?if?(((char)tempchar)?!=?'r'){
?70?System.out.print((char)tempchar);
?71?}
?72?}
?73?reader.close();
?74?}?catch?(Exception?e)?{
?75?e.printStackTrace();
?76?}
?77?try?{
?78?System.out.println("以字符為單位讀取文件內容,一次讀多個字節:");
?79?//一次讀多個字符
?80?char[]?tempchars?=?new?char[30];
?81?int?charread?=?0;
?82?reader?=?new?InputStreamReader(new?FileInputStream(fileName));
?83?//讀入多個字符到字符數組中,charread為一次讀取字符數
?84?while?((charread?=?reader.read(tempchars))!=-1){
?85?//同樣屏蔽掉r不顯示
?86?if?((charread?==?tempchars.length)&&(tempchars[tempchars.length-1]?!=?'r')){
?87?System.out.print(tempchars);
?88?}else{
?89?for?(int?i=0;?i<charread;?i++){
?90?if(tempchars[i]?==?'r'){
?91?continue;
?92?}else{
?93?System.out.print(tempchars[i]);
?94?}
?95?}
?96?}
?97?}
?98?}?catch?(Exception?e1)?{
?99?e1.printStackTrace();
100?}finally?{
101?if?(reader?!=?null){
102?try?{
103?reader.close();
104?}?catch?(IOException?e1)?{
105?}
106?}
107?}
108?}
109?/**
110?*?以行為單位讀取文件,常用于讀面向行的格式化文件
111?*?@param?fileName?文件名
112?*/
113?public?static?void?readFileByLines(String?fileName){
114?File?file?=?new?File(fileName);
115?BufferedReader?reader?=?null;
116?try?{
117?System.out.println("以行為單位讀取文件內容,一次讀一整行:");
118?reader?=?new?BufferedReader(new?FileReader(file));
119?String?tempString?=?null;
120?int?line?=?1;
121?//一次讀入一行,直到讀入null為文件結束
122?while?((tempString?=?reader.readLine())?!=?null){
123?//顯示行號
124?System.out.println("line?"?+?line?+?":?"?+?tempString);
125?line++;
126?}
127?reader.close();
128?}?catch?(IOException?e)?{
129?e.printStackTrace();
130?}?finally?{
131?if?(reader?!=?null){
132?try?{
133?reader.close();
134?}?catch?(IOException?e1)?{
135?}
136?}
137?}
138?}
139?/**
140?*?隨機讀取文件內容
141?*?@param?fileName?文件名
142?*/
143?public?static?void?readFileByRandomAccess(String?fileName){
144?RandomAccessFile?randomFile?=?null;
145?try?{
146?System.out.println("隨機讀取一段文件內容:");
147?//?打開一個隨機訪問文件流,按只讀方式
148?randomFile?=?new?RandomAccessFile(fileName,?"r");
149?//?文件長度,字節數
150?long?fileLength?=?randomFile.length();
151?//?讀文件的起始位置
152?int?beginIndex?=?(fileLength?>?4)???4?:?0;
153?//將讀文件的開始位置移到beginIndex位置。
154?randomFile.seek(beginIndex);
155?byte[]?bytes?=?new?byte[10];
156?int?byteread?=?0;
157?//一次讀10個字節,如果文件內容不足10個字節,則讀剩下的字節。
158?//將一次讀取的字節數賦給byteread
159?while?((byteread?=?randomFile.read(bytes))?!=?-1){
160?System.out.write(bytes,?0,?byteread);
161?}
162?}?catch?(IOException?e){
163?e.printStackTrace();
164?}?finally?{
165?if?(randomFile?!=?null){
166?try?{
167?randomFile.close();
168?}?catch?(IOException?e1)?{
169?}
170?}
171?}
172?}
173?/**
174?*?顯示輸入流中還剩的字節數
175?*?@param?in
176?*/
177?private?static?void?showAvailableBytes(InputStream?in){
178?try?{
179?System.out.println("當前字節輸入流中的字節數為:"?+?in.available());
180?}?catch?(IOException?e)?{
181?e.printStackTrace();
182?}
183?}
184?public?static?void?main(String[]?args)?{
185?String?fileName?=?"C:/temp/newTemp.txt";
186?ReadFromFile.readFileByBytes(fileName);
187?ReadFromFile.readFileByChars(fileName);
188?ReadFromFile.readFileByLines(fileName);
189?ReadFromFile.readFileByRandomAccess(fileName);
190?}
191?}

二、將內容追加到文件尾部

?1?import?java.io.FileWriter;
?2?import?java.io.IOException;
?3?import?java.io.RandomAccessFile;
?4?/**
?5?*?將內容追加到文件尾部
?6?*/
?7?public?class?AppendToFile?{
?8?/**
?9?*?A方法追加文件:使用RandomAccessFile
10?*?@param?fileName?文件名
11?*?@param?content?追加的內容
12?*/
13?public?static?void?appendMethodA(String?fileName,
14?
15?String?content){
16?try?{
17?//?打開一個隨機訪問文件流,按讀寫方式
18?RandomAccessFile?randomFile?=?new?RandomAccessFile(fileName,?"rw");
19?//?文件長度,字節數
20?long?fileLength?=?randomFile.length();
21?//將寫文件指針移到文件尾。
22?randomFile.seek(fileLength);
23?randomFile.writeBytes(content);
24?randomFile.close();
25?}?catch?(IOException?e){
26?e.printStackTrace();
27?}
28?}
29?/**
30?*?B方法追加文件:使用FileWriter
31?*?@param?fileName
32?*?@param?content
33?*/
34?public?static?void?appendMethodB(String?fileName,?String?content){
35?try?{
36?//打開一個寫文件器,構造函數中的第二個參數true表示以追加形式寫文件
37?FileWriter?writer?=?new?FileWriter(fileName,?true);
38?writer.write(content);
39?writer.close();
40?}?catch?(IOException?e)?{
41?e.printStackTrace();
42?}
43?}
44?public?static?void?main(String[]?args)?{
45?String?fileName?=?"C:/temp/newTemp.txt";
46?String?content?=?"new?append!";
47?//按方法A追加文件
48?AppendToFile.appendMethodA(fileName,?content);
49?AppendToFile.appendMethodA(fileName,?"append?end.?n");
50?//顯示文件內容
51?ReadFromFile.readFileByLines(fileName);
52?//按方法B追加文件
53?AppendToFile.appendMethodB(fileName,?content);
54?AppendToFile.appendMethodB(fileName,?"append?end.?n");
55?//顯示文件內容
56?ReadFromFile.readFileByLines(fileName);
57?}
58?}