總結的很粗糙,之後時間富裕了好好修改一下。java
1:Java語言定義了許多類專門負責各類方式的輸入或者輸出,這些類都被放在java.io包中。其中,面試
全部輸入流類都是抽象類InputStream(字節輸入流),或者抽象類Reader(字符輸入流)的子類;數組
而全部輸出流都是抽象類OutputStream(字節輸出流)或者Writer(字符輸出流)的子類。eclipse
【首先須要明白的是:流是幹什麼的???(爲了永久性的保存數據)ide
根據數據流向的不一樣分爲輸入流和輸出流;編碼
根據處理數據類型的不一樣分爲字符流和字節流;spa
】設計
【而後須要明白的是輸入模式和輸出模式是誰流向誰:3d
InputStream(字節輸入流)和Reader(字符輸入流)通俗的理解都是讀(read)的。code
OutputStream(字節輸出流)和Writer(字符輸出流)通俗的理解都是寫(writer)的。
】
最後下面搞清楚各類流的類型的該怎麼用,誰包含誰,理清思路。
2:InputStream類是字節輸入流的抽象類,是全部字節輸入流的父類,InputStream類具備層次結構以下圖所示;
3:java中的字符是Unicode編碼的,是雙字節的。InputStream是用來處理字節的,在處理字符文本時很不方便。Java爲字符文本的輸入提供了專門的一套類Reader。Reader類是字符輸入流的抽象類,全部字符輸入流的實現都是它的子類。
4:輸出流OutputStream類是字節輸入流的抽象類,此抽象類表示輸出字節流的全部類的超類。
5:Writer類是字符輸出流的抽象類,全部字符輸出類的實現都是它的子類。
6:File類是IO包中惟一表明磁盤文件自己的對象。經過File來建立,刪除,重命名文件。File類對象的主要做用就是用來獲取文本自己的一些信息。如文本的所在的目錄,文件的長度,讀寫權限等等。(有的須要記憶,好比isFile(),isDirectory(),exits();有的瞭解便可。使用的時候查看API)
1 package com.ningmeng; 2 3 import java.io.File; 4 5 public class Test { 6 7 public static void main(String[] args) throws Exception{ 8 // TODO Auto-generated method stub 9 File file=new File("aa.txt");//文件默認就建立在你建立的項目下面,刷新便可看到 10 System.out.println(file.exists());//判斷文件是否存在 11 file.createNewFile();//建立文件,不是文件夾 12 System.out.println(file.exists());//再次判斷是否存在 13 System.out.println(file.getName());//獲取文件的名字 14 System.out.println(file.getAbsolutePath());//獲取文件的絕對路徑 15 System.out.println(file.getPath());//獲取文件的相對路徑 16 System.out.println(file.getParent());//獲取文件的父路徑 17 System.out.println(file.canRead());//文件是否可讀 18 System.out.println(file.canWrite());//文件是否可寫 19 System.out.println(file.length());//文件的長度 20 System.out.println(file.lastModified());//文件最後一次修改的時間 21 System.out.println(file.isDirectory());//判斷文件是不是一個目錄 22 System.out.println(file.isHidden());//文件是否隱藏 23 System.out.println(file.isFile());//判斷文件是否存在 24 } 25 26 }
public String[] list():獲取指定目錄下的全部文件或者文件夾的名稱數組
list()獲取某個目錄下全部的文件或者文件夾:
1 package com.ningmeng; 2 3 import java.io.File; 4 5 public class FileTest { 6 7 public static void main(String[] args){ 8 File file=new File("D:/");//指定文件目錄 9 String[] str=file.list();//獲取指定目錄下的全部文件或者文件夾的名稱數組 10 for(String s : str){//增強for循環遍歷輸出 11 System.out.println(s); 12 } 13 14 } 15 }
1 package com.ningmeng; 2 3 import java.io.File; 4 5 public class FileTest { 6 7 public static void main(String[] args){ 8 File file=new File("D:/");//指定文件路徑 9 File[] f=file.listFiles();//獲取指定目錄下的全部文件或者文件夾的File數組 10 for(File fi : f){//增強for循環遍歷輸出 11 System.out.println(fi); 12 } 13 14 } 15 }
案例演示:
獲取某種格式的文件好比獲取某種後綴的圖片,並輸出文件名:
1 package com.ningmeng; 2 3 import java.io.File; 4 5 public class FileTest { 6 7 public static void main(String[] args){ 8 File file=new File("C:\\Users\\biehongli\\Pictures\\xuniji"); 9 String[] str=file.list(); 10 11 for(String s : str){ 12 if(s.endsWith(".jpg") || s.endsWith(".png")){//若是後綴是這種格式的就輸出 13 System.out.println(s); 14 } 15 } 16 17 18 } 19 }
下面演示獲取文件夾下面子目錄裏面的文件獲取(並無徹底獲取子目錄的子目錄等等,僅僅獲取了子一級目錄):
1 package com.ningmeng; 2 3 import java.io.File; 4 5 public class FileTest { 6 7 public static void main(String[] args){ 8 File file=new File("C:\\Users\\biehongli\\Pictures\\Camera Roll"); 9 10 File[] f=file.listFiles(); 11 12 for(File fi : f){ 13 if(fi.isDirectory()){//判斷若是是一個目錄 14 String[] s=fi.list(); 15 for(String str : s){ 16 if(str.endsWith(".jpg")){ 17 System.out.println(str); 18 } 19 } 20 } 21 } 22 } 23 }
A:文件名稱過濾器的概述
1 package com.ningmeng; 2 3 import java.io.File; 4 import java.io.FilenameFilter; 5 6 public class FileTest { 7 8 public static void main(String[] args){ 9 File file=new File("C:\\Users\\biehongli\\Pictures\\Camera Roll"); 10 11 String[] str=file.list(new FilenameFilter() {//過濾器,匿名內部類 12 13 @Override 14 public boolean accept(File dir, String name) { 15 // TODO Auto-generated method stub 16 //System.out.println(dir);//獲取文件的路徑 17 //System.out.println(name);//獲取文件的名字 18 File f=new File(dir,name); 19 return f.isFile() && f.getName().endsWith(".jpg"); 20 } 21 }); 22 for(String s : str){ 23 System.out.println(s); 24 } 25 26 } 27 }
7:下面以一些字節輸入輸出流具體的案例操做(操做的時候認清本身使用的是字節流仍是字符流):
FileInputStream的單個字節讀取:
FileOutputStream的單個字節寫入:
1 package com.ningmeng; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 6 public class FileTest { 7 8 public static void main(String[] args) throws Exception{ 9 FileInputStream fis=new FileInputStream("aaa.txt"); 10 FileOutputStream fos=new FileOutputStream("bbb.txt",true); 11 //FileOutputStream()後面加true指文件後面可追加 12 13 int a=fis.read();//read()一次讀取一個字節 14 System.out.println(a);//讀取的一個字節輸出 15 16 fos.write(101);//write()一次寫一個字節 17 fis.close();//必定記得關閉流,養成好習慣 18 fos.close(); 19 } 20 }
FileInputStream和FileOutputStream進行拷貝文本或者圖片或者歌曲:
1 package com.ningmeng; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 6 public class FileTest { 7 8 public static void main(String[] args) throws Exception{ 9 FileInputStream fis=new FileInputStream("aaa.txt"); 10 FileOutputStream fos=new FileOutputStream("bbb.txt"); 11 //若是沒有bbb.txt,會建立出一個 12 13 int b; 14 while((b=fis.read())!=-1){ 15 fos.write(b); 16 } 17 fis.close(); 18 fos.close(); 19 } 20 }
FileInputStream和FileOutputStream定義小數組進行讀寫操做:
1 package com.ningmeng; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 6 public class FileTest { 7 8 public static void main(String[] args) throws Exception{ 9 FileInputStream fis = new FileInputStream("aaa.txt"); 10 FileOutputStream fos = new FileOutputStream("bbb.txt"); 11 int len; 12 byte[] arr = new byte[1024 * 8];//自定義字節數組 13 14 while((len = fis.read(arr)) != -1) { 15 //fos.write(arr); 16 fos.write(arr, 0, len);//寫出字節數組寫出有效個字節個數 17 } 18 //IO流(定義小數組) 19 //write(byte[] b) 20 //write(byte[] b, int off, int len)寫出有效的字節個數 21 22 fis.close(); 23 fos.close(); 24 } 25 }
IO流(BufferedInputStream和BufferOutputStream拷貝)
1 package com.ningmeng; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.FileInputStream; 6 import java.io.FileOutputStream; 7 8 public class FileTest { 9 10 public static void main(String[] args) throws Exception{ 11 FileInputStream fis = new FileInputStream("aaa.txt"); 12 FileOutputStream fos = new FileOutputStream("bbb.txt"); 13 14 BufferedInputStream bis=new BufferedInputStream(fis); 15 //使用裝飾模式,把fis裝飾進去bis中。使用緩衝讀取速度變快 16 BufferedOutputStream bos=new BufferedOutputStream(fos); 17 18 int b; 19 while((b=bis.read())!=-1){ 20 bos.write(b); 21 } 22 bis.close(); 23 bos.close(); 24 } 25 }
面試題:小數組的讀寫和帶Buffered的讀取哪一個更快?
1 package com.ningmeng; 2 3 import java.io.FileReader; 4 import java.io.FileWriter; 5 6 public class FileTest { 7 8 public static void main(String[] args) throws Exception{ 9 //FileReader類的read()方法能夠按照字符大小讀取 10 FileReader fr=new FileReader("aaa.txt"); 11 int b; 12 while((b=fr.read())!=-1){ 13 System.out.println((char)b);//int類型轉爲字符型 14 } 15 fr.close(); 16 17 //FileWriter類的write()方法能夠自動把字符轉爲字節寫出 18 FileWriter fw = new FileWriter("aaa.txt",true); 19 fw.write("aaa"); 20 fw.close(); 21 22 //字符流的拷貝 23 FileReader fr2 = new FileReader("aaa.txt"); 24 FileWriter fw2 = new FileWriter("bbb.txt"); 25 26 int ch; 27 while((ch = fr2.read()) != -1) { 28 fw2.write(ch); 29 } 30 31 fr2.close(); 32 fw2.close(); 33 } 34 }
1 package com.ningmeng; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.FileReader; 6 import java.io.FileWriter; 7 8 public class FileTest { 9 10 public static void main(String[] args) throws Exception{ 11 BufferedReader br=new BufferedReader(new FileReader("aaa.txt")); 12 BufferedWriter bw=new BufferedWriter(new FileWriter("bbb.txt")); 13 //BufferedReader和BufferedWriter的使用: 14 int b; 15 while((b=br.read())!=-1){ 16 bw.write((char)b); 17 } 18 br.close(); 19 bw.close(); 20 } 21 }
先寫到這裏吧,內容比較多,之後有時間再總結,也方便本身腦補