IO : input ouput 流 相對於java(內存)java
File: 文件,是JAVA中的對象,用來映射硬盤中的文件或者目錄算法
注意:java中‘\’是轉義字符,因此‘\\’才能表示目錄數組
File經常使用方法:測試
1 File file=new File("D:\\File\\a"); 2 System.out.println("此抽象路徑名錶示的文件是否可執行---->"+file.canExecute()); 3 System.out.println("此抽象路徑名錶示的文件是否可讀---->"+file.canRead()); 4 System.out.println("此抽象路徑名錶示的文件是否可寫---->"+file.canWrite()); 5 System.out.println("此抽象路徑名錶示的文件是否存在---->"+file.exists()); 6 System.out.println("此抽象路徑名錶示的文件是不是一個目錄---->"+file.isDirectory()); 7 System.out.println("此抽象路徑名錶示的文件是不是一個文件---->"+file.isFile()); 8 System.out.println("此抽象路徑名錶示的文件是不是一個隱藏文件---->"+file.isHidden()); 9 System.out.println("getName-->"+file.getName());// 獲取文件的名字 10 System.out.println("getName-->"+file.getPath());// 獲取文件的路徑
獲取目錄下全部文件並遍歷:spa
1 //放進一個字符串數組 2 String [] a=file.list(); 3 for (String s : a) { 4 System.out.println(s); 5 } 6 7 //放進一個File數組 8 File [] b=file.listFiles(); 9 for (File f : b) { 10 System.out.println(f); 11 }
列出目錄下的全部子文件(遞歸算法)code
1 public static void showAllFiles(File file){ 2 //用一個文件數組存放目錄中的文件 3 File [] files=file.listFiles(); 4 //遍歷 5 for (File f : files) { 6 //文件爲空,終止程序 7 if(f==null){ 8 return; 9 } 10 //文件爲目錄形式,遞歸調用自己 11 if(f.isDirectory()){ 12 showAllFiles(f); 13 //是文件就打印路徑名和文件名 14 }else{ 15 if(f.getName().endsWith(".exe") || f.getName().endsWith(".tmp")){ 16 System.out.println(f.getPath() + f.getName()); 17 } 18 } 19 } 20 } 21 //測試 22 // File file1=new File("D:\\"); 23 // showAllFiles(file1);
字節流:對象
1 /** 2 * 字節流傳輸數據 3 * @param copyFile 輸入目標文件 4 * @param targetFile 輸出目標文件 5 */ 6 public static void inputAndOutput(File copyFile,File targetFile){ 7 8 //定義輸入流 9 FileInputStream fis=null; 10 //定義輸出流 11 FileOutputStream fos=null; 12 try { 13 //建立輸入流對象 14 fis=new FileInputStream(copyFile); 15 //建立輸出流對象 16 fos=new FileOutputStream(targetFile); 17 18 //定義byte數組存放字節流(自定義大小) 19 byte [] b=new byte[1024]; 20 //返回一次流對象傳輸的字節大小 21 @SuppressWarnings("unused") 22 int i=0; 23 //當爲空時會返回-1,以此終止流的傳輸 24 while((i=fis.read(b))>0){ 25 fos.write(b); 26 } 27 28 } catch (IOException e) { 29 e.printStackTrace(); 30 } finally{ 31 //最後釋放流對象 32 try { 33 if(fis!=null){ 34 fis.close(); 35 } 36 if(fos!=null){ 37 fos.close(); 38 } 39 40 } catch (IOException e) { 41 e.printStackTrace(); 42 } 43 } 44 45 } 46 //字節流傳輸數據測試 47 // File copyFile =new File("D:\\File\\a\\b\\Integer.png"); 48 // File targetFile=new File("D:\\File\\a\\Integer.png"); 49 // inputAndOutput(copyFile,targetFile);
字符流blog
字符流輸入:遞歸
1 /** 2 * 讀取文件內容到控制檯 3 * @param file 4 */ 5 public static void input(File file) { 6 //字符流對象 7 FileReader fr = null; 8 //包裝字符流對象 9 BufferedReader br = null; 10 try { 11 fr = new FileReader(file); 12 br = new BufferedReader(fr); 13 String s=null; 14 do { 15 //按行讀取 16 s=br.readLine(); 17 if(s!=null){ 18 System.out.println(s); 19 } 20 } while (s!=null); 21 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } finally { 25 //關閉流,先外後內 26 try { 27 if (br != null) { 28 br.close(); 29 } 30 if (fr != null) { 31 fr.close(); 32 } 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } 36 } 37 38 }
字符流輸出:內存
1 //字符流輸出 2 public static void Output(File file){ 3 FileWriter fw=null; 4 BufferedWriter bw =null; 5 try { 6 fw=new FileWriter(file,true);//true 表示在文件中追加,false表示覆蓋 7 bw= new BufferedWriter(fw); 8 bw.write("你好呀"); 9 bw.newLine();//換行 10 bw.write("世界"); 11 bw.flush(); 12 } catch (IOException e) { 13 e.printStackTrace(); 14 } finally { 15 //關閉流,先外後內 16 try { 17 if (bw != null) { 18 bw.close(); 19 } 20 if (fw != null) { 21 fw.close(); 22 } 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } 26 } 27 28 }
測試:
1 public static void main(String[] args) { 2 File file = new File("D:\\File\\a\\a.txt"); 3 // 4 input(file); 5 Output(file); 6 7 }