1.IO: I : input 輸入 O:output 輸出
輸入輸出都是以內存爲基準。 將數據文件讀入到內存中成爲輸入 。 將數據從內存中存儲到磁盤或發送到網線上傳輸成爲輸出。
輸入流,形象上相當得到一根有水的水管。其中水管中每個水滴對應於該IO流裏的數據單元。 如果是字符流,每個水滴就是字符;如果是字節流,每個水滴就是字節。
程序可以做:
1. 每次去“取”一個水滴,執行該方法時程序就會返回得到的水滴。
2. 實際編程中,往往會先創建一個字節數組或字符數組,該數組作爲取水的竹筒。
輸出流,形象上相當於得到了一根沒有水的空水管。 程序可以做: 1. 每次可以向水管輸出一滴水。程序每次把一個竹筒的指定範圍的水滴(offset, length)輸出到水管中。
2.java是通過一個File類來操作文件的。
創建文件對象:就代表一個真實的文件
File file = new File("文件路徑/文件夾路徑");
//獲取指定目錄下所有的文件信息
File[] files = file.listFiles();
//判斷是否是文件
f.isFile()
//文件或者文件夾名稱 f.getName()
//獲取文件的絕對路徑 f.getPath()
//判斷是否是目錄 f.isDirectory()
//判斷文件是否存在 f.exists()
//創建文件或者文件夾 f.mkdirs()
//刪除文件 f.delete()
遞歸列出所有的文件
public static void main(String[] args) {
//通過將給定路徑名字符串轉換爲抽象路徑名來創建一個新 File 實例 File:可以用於表示文件|目錄
File file = new File("D:/fkjava/Java基礎班/day14");
//根據文件指定的文件獲取文件下所有的子文件以及目錄
File_BianLi.searchFile(file);
}
public static void searchFile(File file) {
//獲取指定目錄下所有的文件信息
File[] files = file.listFiles();
System.out.println("files:"+files);
for(File f : files){
if(f.isFile()){
//此處的f表示文件
System.out.println("文件名:"+f.getName());
}else{
//此處的f表示目錄
System.out.println(f.getName()+":是一個目錄");
//繼續獲取目錄下的所有的子文件以及目錄
searchFile(f);
}
}
3. API
緩衝字符輸入流多了一個按行讀取文本文件內容 readLine(); 文本文件的操作建議使用緩衝字符流。
4.序列化和反序列化
序列化(Serialize) 序列化對象:序列化對象是將對象數據保存到序列化文件中。
①被序列化的對象一定要實現序列化接口Serializable。
②開始對象序列化 :使用ObjectOutputStream(對象字節輸出流),將對象序列化成文件。
反序列化對象:將序列化文件解析成對象。
①反序列化對象,對象依然需要實現序列化接口Serializable。
②使用ObjectInputStream將序列化文件輸入到內存中來解析。
5.文件複製
FileInputStream創建的3種方式:
FileInputStream inuput=new FileInputStream("");
FileInputStream inuput=new FileInputStream(new File(""));
FileInputStream inuput=new FileInputStream(input);
//定義水桶
byte[] shuiTong = new byte[1024*1024];
int len = 0;
while((len = input.read(shuiTong))!=-1){
//通過輸出流,將數據從內存中寫入磁盤
out.write(shuiTong,0,len);
}
6.序列化
public static void main(String[] args) {
try(
//通過字節輸出流 指定輸出文件的位置 需要將對象序列化至哪一個文件
OutputStream out = new FileOutputStream("src/org/fkjava/java_io/序列化/user");
ObjectOutputStream objectOutputStream = new ObjectOutputStream(out);) {
User user = new User(“jack”,35,new Address("0001","加拿大"));
User user2 = new User("long",35,new Address("0002","廣州"));
List<User> list = new ArrayList();
list.add(user);
list.add(user2);
//通過對象流 將對象寫入至磁盤文件 該過程叫做 對象序列化
objectOutputStream.writeObject(list);
objectOutputStream.flush();
} catch (Exception e) {
e.printStackTrace();
}