其餘知識點將放置後續章節(我想,文章太長了,誰都沒耐心翻到最後)
對於文件內容的操做主要分爲兩大類
分別是:
字符流
字節流
其中,字符流有兩個抽象類:Writer ,Reader
其對應子類FileWriter和FileReader可實現文件的讀寫操做
BufferedWriter和BufferedReader可以提供緩衝區功能,用以提升效率
一樣,字節流也有兩個抽象類:InputStream OutputStream
其對應子類有FileInputStream和FileOutputStream實現文件讀寫
BufferedInputStream和BufferedOutputStream提供緩衝區功能
俺當初學IO的時候犯了很多迷糊,網上有些代碼也沒法經過編譯,甚至風格都很大不一樣,因此新手請注意:
1.本文代碼較長,不應省略的都沒省略,主要是由於做爲一個新手須要養成良好的代碼編寫習慣
2.本文在linux下編譯,相似於File.pathSeparator和File.separator這種表示方法是出於跨平臺性和健壯性考慮
3.代碼中有些操做有多種執行方式,我採用了方式1...方式2...的表述,只需輕輕解開註釋即可編譯
4.代碼中並無在主方法上拋出異常,而是分別捕捉,形成代碼過長,若是僅是測試,或者不想有好的編程習慣,那你就隨便拋吧……
5.功能相似的地方就沒有重複寫註釋了,若是新手看不懂下面的代碼,那確定是上面的沒有理解清楚
字符流
實例1:字符流的寫入
-
import java.io.File;
-
import java.io.FileWriter;
-
import java.io.IOException;
-
-
public class Demo {
-
public static void main(String[] args ) {
-
-
-
-
String path = File.separator + "home" + File.separator + "siu" +
-
File.separator + "work" + File.separator + "demo.txt";
-
-
-
FileWriter w = null;
-
try {
-
-
-
w = new FileWriter(path);
-
-
-
w.write("Nerxious is a good boy\r\n");
-
-
w.flush();
-
} catch (IOException e) {
-
e.printStackTrace();
-
} finally {
-
-
-
if(w != null) {
-
try {
-
-
w.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
}
編譯以後,在目錄下面生成文件,並寫入字符串
實例2:字符流的讀取
-
import java.io.File;
-
import java.io.FileReader;
-
import java.io.IOException;
-
-
public class Demo2 {
-
public static void main(String[] args ) {
-
String path = File.separator + "home" + File.separator + "siu" +
-
File.separator + "work" + File.separator + "demo.txt";
-
-
FileReader r = null;
-
try {
-
r = new FileReader(path);
-
-
-
-
int temp1 = r.read();
-
System.out.println((char)temp1);
-
int temp2 = r.read();
-
System.out.println((char)temp2);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
} catch (IOException e) {
-
e.printStackTrace();
-
} finally {
-
if(r != null) {
-
try {
-
r.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
}
編譯以後的效果:
實例3:文本文件的複製
-
import java.io.File;
-
import java.io.FileReader;
-
import java.io.FileWriter;
-
import java.io.IOException;
-
-
public class Demo {
-
public static void main(String[] args ) {
-
-
String doc = File.separator + "home" + File.separator + "siu" +
-
File.separator + "work" + File.separator + "demo.txt";
-
-
String copy = File.separator + "home" + File.separator + "siu" +
-
File.separator + "life" + File.separator + "lrc.txt";
-
-
FileReader r = null;
-
FileWriter w = null;
-
try {
-
r = new FileReader(doc);
-
w = new FileWriter(copy);
-
-
-
int temp = 0;
-
while((temp = r.read()) != -1) {
-
w.write(temp);
-
}
-
-
-
-
-
-
-
-
-
-
-
} catch (IOException e) {
-
e.printStackTrace();
-
} finally {
-
-
if(r != null) {
-
try {
-
r.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
if(w != null) {
-
try {
-
w.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
}
實例4:利用字符流的緩衝區來進行文本文件的複製
-
import java.io.BufferedReader;
-
import java.io.BufferedWriter;
-
import java.io.File;
-
import java.io.FileReader;
-
import java.io.FileWriter;
-
import java.io.IOException;
-
-
public class Demo {
-
public static void main(String[] args ) {
-
-
String doc = File.separator + "home" + File.separator + "siu" +
-
File.separator + "work" + File.separator + "demo.txt";
-
-
String copy = File.separator + "home" + File.separator + "siu" +
-
File.separator + "life" + File.separator + "lrc.txt";
-
-
FileReader r = null;
-
FileWriter w = null;
-
-
BufferedReader br = null;
-
BufferedWriter bw = null;
-
try {
-
r = new FileReader(doc);
-
w = new FileWriter(copy);
-
-
-
-
br = new BufferedReader(r);
-
bw = new BufferedWriter(w);
-
-
String line = null;
-
-
-
while((line = br.readLine()) != null) {
-
-
bw.write(line);
-
-
-
-
-
bw.newLine();
-
}
-
-
} catch (IOException e) {
-
e.printStackTrace();
-
} finally {
-
-
-
if(br != null) {
-
try {
-
r.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
if(bw != null) {
-
try {
-
bw.close();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
}
-
}