一、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();
}
}
}
}
}