1.知識(shí)點(diǎn):
- 字節(jié)流:FileInputStream類(讀取文件內(nèi)容)FileOutputStream類(輸出文件內(nèi)容)
- BufferedInputStream(讀取文件)BufferedOutputStream(輸出文件)
- ObjectInputStream(讀入文本里存的對(duì)象) ObjectOutputStream(對(duì)象寫入文本)
- FileReader(讀取文件內(nèi)容) FileWriter (寫入文件)
- BufferedReader(讀取內(nèi)容文件)BufferedWriter(寫入文件)
2.知識(shí)點(diǎn)的運(yùn)用:
1.I/O對(duì)象:不屬于內(nèi)存對(duì)象,創(chuàng)建后需要自己關(guān)閉。
2.創(chuàng)建文件:
//創(chuàng)建文件完整路徑
String path = "文件目錄";
//拼接目錄
File file = new File(path.concat("\\1.txt"));
//判斷文件是否存在
if (file.exists() == false){
try {
file.createNewFile();
//異常處理
}catch (IOException e){
System.out.println("IO異常了");
}
}
3.創(chuàng)建目錄:
mkdirs()可以建立多級(jí)文件夾, mkdir()只會(huì)建立一級(jí)的文件夾, 如下:
new File("/tmp/one/two/three").mkdirs();
//執(zhí)行后, 會(huì)建立tmp/one/two/three四級(jí)目錄
new File("/tmp/one/two/three").mkdir();
//則不會(huì)建立任何目錄, 因?yàn)檎也坏?tmp/one/two目錄, 結(jié)果返回false
// throws IOException :拋出異常
public void createDirectory() throws IOException {
File f = new File("文件目錄");
f.mkdir();
}
4.字節(jié)流與字符流的區(qū)別:
- 字節(jié)流能對(duì)文件里面所有的數(shù)據(jù)類型進(jìn)行操作。
- 字符流是操所文本數(shù)據(jù)的,只能操作文本數(shù)據(jù)。
5.字節(jié)流:
- FileInputStream類(讀取文件類容):該方法是一個(gè)一個(gè)字節(jié)地讀取數(shù)據(jù),效率很慢
//例1:
FileInputStream fs = new FileInputStream("文件路徑");
byte[ ] name = new byte[12];
int count = fs.read(name);
fs.close();
//例2:
FileInputStream fs = new FileInputStream("文件路徑");
long len = 0;
while((len = fs.read()) != -1) {
char c = (char) len;
System.out.print(c);
}
fs.close();
- FileOutputStream類(寫入文件)
public void class() throws IOException {
FileOutputStream fos = new FileOutputStream("文件路徑");
fos.write("123".getBytes());
byte[ ] text = {'1','2','3'};
fos.write(text);
fos.close();
}
- BufferedInputStream(讀取文件)
FileInputStream fis = new FileInputStream("文件路徑");
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] b = new byte[1024];
while(bis.read(b) != -1) {
System.out.println(new String(b));
}
bis.close();
fis.close();
- BufferedOutputStream(寫入文件)
public void class() throws IOException {
FileOutputStream fos = new FileOutputStream("文件路徑");
BufferedOutputStream bop = new BufferedOutputStream(fos);
bop.write("123".getBytes());
byte[ ] in = new byte[1024];
while(bop.write(in) != -1){
bop.write(in,0,bop.write(in));
}
bop.close();
fos.close();
}
- 帶Buffered和不帶Buffered的區(qū)別
帶Buffered的是緩沖字節(jié)輸入流或者是緩沖字節(jié)輸出流,它的效率比不帶Buffered的效率快很多。
6.序列化:
將對(duì)象轉(zhuǎn)換成字節(jié)。
想要將對(duì)象寫入文本,該對(duì)象必須實(shí)現(xiàn)Serializable接口,該接口為空接口,叫做標(biāo)志性接口。 - 對(duì)象寫入文本
public class MyClass {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("文件路徑");
ObjectOutputStream oos = new ObjectOutputStream(fos);
person m = new person ();
m.name = "小王";
m.age = 20;
oos.writeObject(m);
oos.close();
fos.close();
}
}
public class person implements Serializable {
public String name;
public int age;
}
- 讀入文本里存的對(duì)象(沿用上一個(gè)person類)
FileInputStream fos = new FileInputStream("文件路徑");
ObjectInputStream oos = new ObjectInputStream(fos);
person m = new person ();
m = (person) oos.readObject();
System.out.println(m);
oos.close();
fos.close();
7.字符流:
- FileReader(讀取文件內(nèi)容)
FileReader fr = new FileReader("文件路徑");
int len = 0;
//一個(gè)字符一個(gè)字符的讀
while((len = fr.read()) != -1) {
System.out.print((char)len);
}
fr.close();

image.png
- FileWriter (寫入文件)
public void class() throws Exception {
FileWriter fw = new FileWriter("文件路徑");
fw.write("abc");
fw.close();
}

image.png
- BufferedReader(讀取內(nèi)容文件):
public void class() throws Exception {
FileReader fw = new FileReader("文件路徑");
BufferedReader br = new BufferedReader(fw);
String str = null;
while((str = br.readLine())!= null){
System.out.println(str);
}
br.close();
fw.close();
}
- BufferedWriter(寫入文件)
FileWriter fw = new FileWriter("文件路徑");
BufferedWriter bw = new BufferedWriter(fw);
bw.write("java開發(fā)");
bw.close();
fw.close();