[TOC]
# 概述
當需要把內存中的數據存儲到持久化設備上這個動作稱為輸出(寫)Output操作。
當把持久設備上的數據讀取到內存中的這個動作稱為輸入(讀)Input操作。
因此我們把這種輸入和輸出動作稱為IO操作
# File類
File文件和目錄路徑名的抽象表示形式。即,Java中把文件或者目錄(文件夾)都封裝成File對象。也就是說如果我們要去操作硬盤上的文件,或者文件夾只要找到File這個類即可
## 構造函數

演示:
~~~
//File構造函數演示
String pathName = "e:\\java_code\\day22e\\hello.java";
File f1 = new File(pathName);//將Test22文件封裝成File對象。注意;有可以封裝不存在文件或者文件夾,變成對象。
System.out.println(f1);
File f2 = new File("e:\\java_code\\day22e","hello.java");
System.out.println(f2);
//將parent封裝成file對象。
File dir = new File("e:\\java_code\\day22e");
File f3 = new File(dir,"hello.java");
System.out.println(f3);
~~~
## File類的獲取
創建完了File對象之后,那么File類中都有如下常用方法,可以獲取文件相關信息

~~~
//創建文件對象
File file = new File("Test22.java");
//獲取文件的絕對路徑,即全路徑
String absPath = file.getAbsolutePath();
//File中封裝的路徑是什么獲取到的就是什么。
String path = file.getPath();
//獲取文件名稱
String filename = file.getName();
//獲取文件大小
long size = file.length();
~~~
## 文件和文件夾的創建刪除等

~~~
// 對文件或者文件加進行操作。
File file = new File("e:\\file.txt");
// 創建文件,如果文件不存在,創建 true 如果文件存在,則不創建 false。 如果路徑錯誤,IOException。
boolean b1 = file.createNewFile();
System.out.println("b1=" + b1);
//-----------刪除文件操作-------注意:不去回收站。慎用------
boolean b2 = file.delete();
System.out.println("b2="+b2);
//-----------需要判斷文件是否存在------------
boolean b3 = file.exists();
System.out.println("b3="+b3);
//-----------對目錄操作 創建,刪除,判斷------------
File dir = new File("e:\\abc");
//mkdir()創建單個目錄。//dir.mkdirs();創建多級目錄
boolean b4 = dir.mkdir();
System.out.println("b4="+b4);
//刪除目錄時,如果目錄中有內容,無法直接刪除。
boolean b5 = dir.delete();
//只有將目錄中的內容都刪除后,保證該目錄為空。這時這個目錄才可以刪除。
System.out.println("b5=" + b5);
//-----------判斷文件,目錄------------
File f = new File("e:\\javahaha");// 要判斷是否是文件還是目錄,必須先判斷存在。
// f.mkdir();//f.createNewFile();
System.out.println(f.isFile());
System.out.println(f.isDirectory());
~~~
## listFiles()方法

~~~
File dir = new File("e:\\java_code");
//獲取的是目錄下的當前的文件以及文件夾的名稱。
String[] names = dir.list();
for(String name : names){
System.out.println(name);
}
//獲取目錄下當前文件以及文件對象,只要拿到了文件對象,那么就可以獲取其中想要的信息
File[] files = dir.listFiles();
for(File file : files){
System.out.println(file);
}
~~~
注意:在獲取指定目錄下的文件或者文件夾時必須滿足下面兩個條件
1,指定的目錄必須是存在的,
2,指定的必須是目錄。否則容易引發返回數組為null,出現NullPointerException
## 文件過濾器
File類中重載的listFiles方法,并且接受指定的過濾器


* 測試類
~~~
public class FileDemo2 {
public static void main(String[] args) {
//獲取擴展名為.java所有文件
//創建File對象
File file = new File("E:\\code\\day11_code");
//獲取指定擴展名的文件,由于要對所有文件進行擴展名篩選,因此調用方法需要傳遞過濾器
File[] files = file.listFiles(new MyFileFilter());
//遍歷獲取到的所有符合條件的文件
for (File f : files) {
System.out.println(f);
}
}
}
~~~
* 自定類繼承FilenameFilter過濾器接口
~~~
//定義類實現文件名稱FilenameFilter過濾器
class MyFileFilter implements FilenameFilter{
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
}
~~~
在listFiles(FileFilter filter) 也可以接受一個FileFilter過濾器,它和我們講的FilenameFilter有啥區別呢?

FilenameFilter過濾器中的accept方法接受兩個參數,一個當前文件或文件夾所在的路徑,一個是當前文件或文件夾對象的名稱。
FileFilter 過濾器中的accept方法接受一個參數,這個參數就當前文件或文件夾對象
**當我們需要過濾文件名稱時就可以使用FilenameFilter這個過濾器,當我們想對當前文件或文件夾進行過濾,就可以使用FileFilter ,比如需要當前目錄下的所有文件夾,就可以使用FileFilter 過濾器**。
* 測試類
~~~
public class FileDemo2 {
public static void main(String[] args) {
//獲取擴展名為.java所有文件
//創建File對象
File file = new File("E:\\code\\day11_code");
//獲取指定目錄下的文件夾
File[] files = file.listFiles(new FileFileterByDir());
//遍歷獲取到的所有符合條件的文件
for (File f : files) {
System.out.println(f);
}
}
}
~~~
* 自定義類繼承FileFilter過濾器接口
~~~
//文件過濾器
class FileFileterByDir implements FileFilter{
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}
~~~
- 基礎
- 編譯和安裝
- scanner類(鍵盤錄入)
- Random類(隨機數)
- 數組
- 方法
- 類
- ArrayList集合
- char與int
- eclipse
- IDEA
- 變量與常量
- 常用API
- String,StringBuffer,StringBuilder
- 正則,Date,DateFormat,Calendar
- 包裝類,System,Math,Arrays,BigInteger,BigDecimal
- 集合,迭代器,增強for,泛型
- List,set,判斷集合唯一
- map,Entry,HashMap,Collections
- 異常
- IO
- File
- 遞歸
- 字節流
- 字符流
- IO流分類
- 轉換流
- 緩沖流
- 流的操作規律
- properties
- 序列化流與反序列化流
- 打印流
- commons-IO
- IO流總結
- 多線程
- 線程池
- 線程安全
- 線程同步
- 死鎖
- lock接口
- ThreadLoad
- 等待喚醒機制
- 線程狀態
- jdbc
- DBUtils
- 連接池DBCP
- c3p0連接池
- 網絡編程
- 多線程socket上傳圖片
- 反射
- xml
- 設計模式
- 裝飾器模式
- web service
- tomcat
- Servlet
- response
- request
- session和cookie
- JSP
- EL
- JSTL
- 事務
- 監聽器Listener
- 過濾器Filter
- json
- linux安裝軟件
- 反射詳解
- 類加載器和注解
- 動態代理
- jedis
- Hibernate
- 簡介
- 創建映射文件
- Hibernate核心配置文件
- 事務和增刪改查
- HibernateUtils
- 持久化對象的三種狀態
- 檢索方式
- query
- Criteria
- SQLQuery
- 持久化類
- 主鍵生成策略
- 緩存
- 事務管理
- 關系映射
- 注解
- 優化
- struts2
- 搭建
- 配置詳解
- Action
- 結果跳轉方式
- 訪問ServletAPI方式
- 如何獲得參數
- OGNL表達式
- valueStack 值棧
- Interceptor攔截器
- spring
- 導包
- IOC和DI
- Bean獲取與實例化
- Bean屬性注入
- spring注解
- 注解分層
- junit整合
- aop
- 動態代理實現
- cglib代理實現
- aop名詞
- spring的aop
- aop-xml詳解
- aop-注解詳解
- 代理方式選擇
- jdbcTemplate
- spring事務管理
- 回滾注意
- 事務傳播屬性
- MyBatis
- MyBatis簡介
- 入門程序
- 與jdbc hibernate不同
- 原始Dao開發
- Mapper動態代理方式
- SqlMapConfig.xml配置文件
- 輸入參數pojo包裝類
- resultMap
- 動態sql
- 一對一關聯
- 一對多
- 整合spring
- 逆向工程
- maven
- maven簡介
- 倉庫
- maven目錄結構
- maven常用命令
- 生命周期
- eclipse中maven插件
- 入門程序
- 整合struct
- 依賴范圍
- 添加插件
- idea配置
- jar包沖突
- 分模塊開發
- 構建可執行的jar包(包含依賴jar包)
- springMVC
- 處理流程
- java面試
- java版本升級
- java1-8版本變更
- java9新特性
- 鎖
- java資料
- idea
- jdk版本切換
- log4j
- 入門實例
- 基本使用方法
- Web中使用Log4j
- spring中使用log4j
- java代碼優化