一、IO的分類
1.輸入流和輸出流
輸入流:從磁盤到內存
輸出流:從內存到磁盤
2.字節流和字符流
字節流:以字節爲單位
字符流:以字符爲單位
3.頂級父類
二、字節流
1.一切皆爲字節。
2.數據追加續寫
構造方法中
public FileOutputStream(File file, boolean append),append爲true表示可以追加
字節流重要練習
package cn.work.test02;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test02 {
/*
1.項目根目錄下建立兩個文件夾:src和dest
2.找一張圖片放入src文件夾中
3.將圖片複製到dest文件夾中
*/
public static void main(String[] args) {
copeImage();
}
private static void copeImage() {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//創建字節輸入流
fis = new FileInputStream("D:\\ideaProject\\day09\\scrs\\Image.png");
//創建字節輸出流
fos = new FileOutputStream("D:\\ideaProject\\day09\\dest\\Image.png");
/*
讀取圖片
*/
// 定義字節數組,作爲裝字節數據的容器
byte[] arr = new byte[1024];
// 定義變量,作爲有效個數
int len = 0;
if ((len = fis.read(arr)) != -1) {
//輸出圖片
fos.write(arr, 0, len);
}
} catch (IOException e) {
System.out.println(e);
} finally {
//判斷流對象是否爲空,防止空指針異常
if (fis != null && fos != null) {
//關閉流
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
三、字符流
字符流需要注意
flush():把緩衝區中的數據刷入硬盤
close():先把緩衝區中的數據刷入硬盤,然後再釋放資源;
flush調用之後,還可以繼續使用流對象;
close調用之後,不能繼續使用流對象;
四、Properties類(它的父類已經淘汰,但它依然活躍在歷史舞臺,因爲配置文件中,經常使用它)
1.Properties是一個key,value型集合
2.繼承HashTable集合
3.一般用在配置文件中
Properties重要練習
package cn.work.test01;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.Scanner;
import java.util.Set;
public class Test {
/*
1.項目根目錄下建立文件: user.txt,文件中存放用戶名和登錄密碼,格式:用戶名,密碼,如:aaa=123;
2. user.txt文件中初始存放的用戶信息有如下:
jack=123
rose=123
tom=123
3.要求完成如下功能:
程序運行時:控制檯提示用戶輸入註冊的用戶名和密碼;
驗證鍵盤錄入的用戶名跟user.txt中已註冊的用戶名是否重複:
是:控制檯提示:用戶名已存在
否:將鍵盤錄入的用戶名及密碼寫入user.txt文件,並在控制檯提示:註冊成功
*/
public static void main(String[] args) {
//鍵盤獲取用戶名和密碼
Scanner sc = new Scanner(System.in);
System.out.println("請輸入用戶名");
String username = sc.next();
System.out.println("請輸入密碼");
String password = sc.next();
registers(username, password);
}
private static void registers(String username, String password) {
FileInputStream fr = null;
try {
//從user.txt文件中讀取數據,並存入到properties集合中
Properties pro = new Properties();
fr = new FileInputStream("D:\\ideaProject\\day09\\user.txt");
pro.load(fr);
//遍歷集合判斷key是否和username相同
Set<String> set = pro.stringPropertyNames();
for (String key : set) {
//如果相同,提示用戶名已存在
if (key.equals(username)) {
System.out.println("提示用戶名已存在");
return;
}
}
//如果不相同,將數據存入propertise集合中
pro.setProperty(username, password);
//將pro集合,輸出到user.txt文件中
pro.store(new FileOutputStream("D:\\ideaProject\\day09\\user.txt"),"");
System.out.println("註冊成功");
} catch (IOException e) {
System.out.println(e);
} finally {
if (fr != null) {
//關閉流
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}