I/O的操作
(一)、基础知识
1.什么是IO?
IO是输入input输出output的首字母缩写形式,直观意思是计算机输入输出,它描述的是计算机的数据流动的过程,因此IO第一大特征是有数据的流动;另外,对于一次IO,它究竟是输入还是输出,是针对不同的主体而言的,不同的主体有不同的描述。例如,甲乙两人交谈,甲将大脑中的想法通过声带震动,继而通过声波传入乙的耳朵,乙通过耳膜的震动再由神经将信号解析到大脑,这个数据流动的过程对甲而言是输出,对乙而言是输入。
2.什么是流?
(1).概念:内存与储存设备之间传输数据的通道
eg:
我们的程序存储在内存中,我们的文件存储在硬盘中
水库: 数据
输水的管道: 相当于流
接水池: 流入/流出
水借助管道进行流入/流出
数据借助流进行传入/传出
3.流的分类
(1).按照流的方向
输入流: 将硬盘中的数据读入到内存中
输出流: 将内存中的数据输出到硬盘中
(2).按单位:
字节流:以字节为单位,可以读写所有数据。
字符流:以字符为单位,只能读写文本数据。
(3).按功能划分:
节点流 :具有实际传输数据的读写功能
过滤流 :在节点流的基础之上增强功能
(二).文件字节流(FileInputStream与FileOutStream)
4.字节流的父类(抽象类)
InputStream : 字节输入流
(1). public int read(){} 从输入流读取数据的下一个字节。
OutputStream : 字节输出流
(1). public void write(){} 将指定的字节写入此输出流。
5.文件字节流(输入流)
FieInputStream : 文件输入流
(1). public int read(byte[] b) 从流中读取多个字节,将读到的内容存入
b数组,返回实际读到的字节数;如果达到文件的尾部返回-1
FileOutputStream : 文件输出流
(1).public void write(byte []b) 一次写多个字节,将b数组中的所有字节,写入输出流.
基本思路:
public int read(){} 单个单个的读取
1.创建文件输入流,
2.读取文件,因为读的操作(如果文件的下一个为空,那么返回-1)
3.打印读取的文件信息
4.一定要关闭文件的流操作
import java.io.FileInputStream;
public class Demo0 {
public static void main(String[] args) throws Exception{
//1.创建文件输入流 ,并且指定文件路径
FileInputStream fileInputStream_one=new FileInputStream("e:\\123.txt");
//2.读取文件
int date=0;
while ((date=fileInputStream_one.read())!=-1){
System.out.print((char)date);
}
fileInputStream_one.close();
}
}
基本思路:
1.利用byte数组 一次性储存数据
2.利用new String() 函数,实现以字符串的形式进行输出
3.read() 返回的类型是int ,单个返回指的是ascll码,如果是byte 那么返回的是读取的个数.
import java.io.FileInputStream;
public class Demo0 {
public static void main(String[] args) throws Exception{
//1.创建文件输入流 ,并且指定文件路径
FileInputStream fileInputStream_one=new FileInputStream("e:\\123.txt");
//2.读取文件
byte date[]=new byte[4];
int count=fileInputStream_one.read(date);
System.out.println(fileInputStream_one.read());
System.out.println(new String(date));
System.out.println("个数为:"+count);
fileInputStream_one.close();
}
}
二次读取操作
import java.io.FileInputStream;
public class Demo0 {
public static void main(String[] args) throws Exception{
//1.创建文件输入流 ,并且指定文件路径
FileInputStream fileInputStream_one=new FileInputStream("e:\\123.txt");
//2.读取文件
byte date[]=new byte[3];
//第一次读取
int count=fileInputStream_one.read(date);
System.out.println(new String(date));
System.out.println("个数为:"+count);
//第二次读取
int count1=fileInputStream_one.read(date);
System.out.println(new String(date));
fileInputStream_one.close();
}
}
byte[]数组的
import java.io.FileInputStream;
public class Demo0 {
public static void main(String[] args) throws Exception{
//1.创建文件输入流 ,并且指定文件路径
FileInputStream fileInputStream_one=new FileInputStream("e:\\123.txt");
//2.读取文件
byte date[]=new byte[3];
int count=0;
while ((count=fileInputStream_one.read(date))!=-1){
System.out.println(new String(date));
}
fileInputStream_one.close();
}
}
6.文件字节流 (输出流)
基本思路:
1.FileOutputStream 输出流
2.write 写的操作
import java.io.FileOutputStream;
public class Demo1 {
public static void main(String[] args) throws Exception{
//1.创建文件的输出流
FileOutputStream fileOutputStream_one=new FileOutputStream("e://123.txt");
/*
//2.写文件
fileOutputStream_one.write(97);
fileOutputStream_one.write('b');
fileOutputStream_one.write(99);
*/
String string="hello word";
fileOutputStream_one.write(string.getBytes());
//3.关闭文件
fileOutputStream_one.close();
System.out.println("项目执行完毕!");
}
}
7.文件字节流复制文件
基本思路:
1.首先先从文件中读取数据
2.然后开始使用文件写入数据
3.1024个字节等于1kb,假如说字节数写少了,那么读取的文件会不完整。
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class Demo0 {
public static void main(String[] args) throws Exception{
//1.创建文件输入流 ,并且指定文件路径
FileInputStream fileInputStream_one=new FileInputStream("E:\\美化图片\\123.jpg");
FileOutputStream fileOutputStream_one=new FileOutputStream("E:\\美化图片\\13.jpg");
//2.边读边写
byte []buf=new byte[1024];
int count=0;
//每次都读取1024个字节
while ((count=fileInputStream_one.read(buf))!=-1){
//截取具体化
fileOutputStream_one.write(buf,0,count);
}
fileInputStream_one.close();
fileOutputStream_one.close();
System.out.println("项目完毕!");
}
}
(三)、字节缓冲流(BufferedOutputStream)
8.字节缓冲流(输入流)
缓冲流: BufferedInputStream/BufferedOutputStream
1.提高IO效率,减少访问磁盘的次数
2.数据存储在缓冲区中,flush是将缓存区的内容写入文件中,也可以直接close.
3.在使用的过程中,会创建一个缓冲区.用于数据的缓存
基本思路:
1.创建文件流,先获取文件()
2.把文件放入缓冲区中去
3.利用缓冲区进行访问文件
(相当于一次性就把文件放入到缓冲区,就访问了一哈硬盘)
import java.io.BufferedInputStream;
import java.io.FileInputStream;
public class Demo3 {
public static void main(String[] args) throws Exception {
//1.创建一个输入流
FileInputStream fileInputStream=new FileInputStream("e://123.txt");
//2.创建一个缓冲流,并且把文件写入到缓冲区
BufferedInputStream bufferedInputStream=new BufferedInputStream(fileInputStream);
//3.读取数据
int count=0;
while ((count=fileInputStream.read())!=-1){
System.out.println((char)count);
}
fileInputStream.close();
bufferedInputStream.close();
}
}
9.字节缓冲流(输出流)
基本思路:
1.了解 BufferedOutputStream 字节输出流
2.先创建文件输出流
3.然后创建文件缓冲输出流,并且把文件加载到缓冲流
4.通过缓冲流写文件的时候, 一定一定要进行 flush(); 否则不能显示.
5.写入文件的时候,可以不用创建文件的名字,函数会帮助我们自动创造一个文件。
但是读取文件的名字的时候,我们一定要一个确定的名字
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
public class Demo5 {
public static void main(String[] args) throws Exception{
//1.创建物件输出
FileOutputStream fileOutputStream=new FileOutputStream("e://1234.txt");
//2.创建文件缓冲
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(fileOutputStream);
//3.写入文件
for (int i = 0; i <10 ; i++) {
bufferedOutputStream.write("hello world".getBytes()); //首先写入缓冲区
bufferedOutputStream.flush(); //刷新硬盘
}
bufferedOutputStream.close();
fileOutputStream.close();
}
}
(四)、对象流(ObjectInputStream)
10.对象流
1.对象流: ObjectOutputStream/ObjectInputStream
2.增强了缓冲区的功能
3.增强了读写8种基本数据类型和字符串功能
4.增强了读写对象的功能: readObject() 从流种读取一个对象 writeObject()向流中写入一个对象.
5.内存写入硬盘中 这叫做序列化
6.硬盘读取到内存中 这叫做反序列化.
在这里插入代码片
11.ObjectOutputStream (序列化 Serializable)
基本思路:
1.首先我们要创造一个文件输出流
2.再创建一个对象输出流,并且把文件放入到对象输出流中去
3.利用文件输出流的 writeObject() 把对象写进去
4.进行刷新硬盘的操作
5.如果要对一个对象进行序列化的操作 必须要实现一个接口 Serializable
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.nio.charset.StandardCharsets;
public class Demo6 {
public static void main(String[] args) throws Exception {
//1.创建文件的输出流
FileOutputStream fileOutputStream=new FileOutputStream("e://2022.bin");
//2.创建对象流
ObjectOutputStream objectOutputStream=new ObjectOutputStream(fileOutputStream);
//3.开始序列化的操作
Student student=new Student("张三",20);
objectOutputStream.writeObject(student);
//4.刷新
objectOutputStream.flush();
//5.关闭的草走
objectOutputStream.close();
fileOutputStream.close();
}
}
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
12.ObjectInputStream (反序列化)
基本思路:
1.了解ObjectInputStream
2.需要强制转换文件的类型
import java.io.FileInputStream;
import java.io.ObjectInputStream;
public class Demo6 {
public static void main(String[] args) throws Exception {
//1.创建文件的输入流
FileInputStream fileInputStream=new FileInputStream("e:\\2022.bin");
//2.创建对象流
ObjectInputStream objectInputStream=new ObjectInputStream(fileInputStream);
//3.读取文件
Student student=(Student) objectInputStream.readObject();
//4.关闭文件
fileInputStream.close();
objectInputStream.close();
System.out.println(student.toString());
}
}
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
}
13.序列化与反序列化的注意事项
(1).序列化类必须实现 Serializable 接口
(2).序列化类中的对象属性实现 Serializable 接口
eg: Address address; 这个也要实现接口
(3).序列化版本ID,保证序列化的类和反序列化的类是同一个类
(4).使用transient(瞬间的,瞬时的),修饰的属性,那么这个属性不能进行序列化(5).静态属性也不能进行序列化.
(6).可以序列化多个对象.
(五)、字符编码
14.字符编码
1.ISO-8859-1
收录除Ascll外,还包西欧。希腊语。台语、阿拉伯语、希伯来语对应的文字符号
2.UTF-8 针对UNicode码表的可变长度字符编码
3.GB2312 简体中文
4.GBK 简体中文扩充
5.BIG5 台湾,繁体中文
当编码方式和解码方式不一致的时候,会出现乱码.
15.字符流抽象类
1.字符码:是char类型的.
2.字符流的父类:(抽象类)
(1).Reader: 字符输入流
public int read(){}
(2).Writer:字符输出流
public void write(){}
import java.io.FileInputStream;
public class Demo7 {
public static void main(String[] args) throws Exception {
//1.创建文件的输入操作
FileInputStream fileInputStream=new FileInputStream("e:\\123.txt");
//2.进行读写的操作
int date=0;
while ((date=fileInputStream.read())!=-1){
System.out.print((char)date);
}
fileInputStream.close();
}
}
假如说文本文档存的是汉字,那么将会输出乱码
(六)、文件字符流(FileReader和FileWriter)
16.文件字符流
文件字符流属于自动匹配类型 不用考虑文件的字符编码
FileReader:
public int read(char[] c) //从流中读取多个字符,将读到内容存入c数组,返回
实际读到的字符数;如果达到文件的尾部,就返回-1;
FileWriter:
public void write(String str) //一次写多个字符,将b数组种所有字符,写入输出流
17.文件字符输入流
基本思路:
1.首先创建一个文件字符输入流
2.读取文件
import java.io.FileReader;
public class Demo8 {
public static void main(String[] args) throws Exception{
//1.创建FilerReader 文件字符输入流
FileReader fileReader=new FileReader("e:\\123.txt");
//2.读取,单个字符读取
int date=0;
while ((date=fileReader.read())!=-1){ //这个就是读取文中的一个字符 (3个字节)
System.out.println((char)date);
}
System.out.println(date);
/* char[]buf=new char[1024];
int count=0;
while ((count=fileReader.read(buf))!=-1){ //读取完毕之后放入到 字符数组中
System.out.println(new String(buf,0,count)); //目的是为了截取有效的参数
}
*/
//3.关闭
fileReader.close();
}
}
18.文件字符输出流
基本思路:
1.
import java.io.FileOutputStream;
import java.io.FileWriter;
public class Demo9 {
public static void main(String[] args) throws Exception{
//设置文件输出流
FileWriter fileWriter=new FileWriter("e:\\789");
//2.开始写入信息
fileWriter.write("java");
//3.关闭
fileWriter.close();
System.out.println("项目执行完毕!");
}
}
19.文件字符流复制文件
只能复制文本文档 ,不能复制图片、声音、视频
基本思路:
1.创建文件的读;
2.创建文件的写
3.边读边写
4.刷新
import java.io.FileReader;
import java.io.FileWriter;
public class Demo10 {
public static void main(String[] args) throws Exception{
//1.文件字符读取
FileReader fileReader=new FileReader("e:\\123.txt");
//2.文件字符写入
FileWriter fileWriter=new FileWriter("e:\\1217.txt");
int count=0;
while ((count=fileReader.read())!=-1){
fileWriter.write((char)count);
fileWriter.flush();
}
System.out.println("复制完毕!!");
}
}
(七)、字符缓冲流
20.字符缓冲流(读取)
1.缓冲流:BufferedReader/BufferedWriter
2.高效读写
3.支持输入换行符
4.可以一次写一行、读一行。
基本思路:
1.创建一个字符读取流
2.创建一个字符读取缓存区,把文件放到缓存区
3.关闭
import java.io.BufferedReader;
import java.io.FileReader;
public class Demo11 {
public static void main(String[] args) throws Exception {
//1.创建一个字符读取流
FileReader fileReader=new FileReader("e:\\123.txt");
//2.创建一个字符读取缓冲流
BufferedReader bufferedReader=new BufferedReader(fileReader);
int count=0;
while ((count=bufferedReader.read())!=-1){
System.out.println((char)count);
}
bufferedReader.close();
}
}
import java.io.BufferedReader;
import java.io.FileReader;
public class Demo11 {
public static void main(String[] args) throws Exception {
//1.创建一个字符读取流
FileReader fileReader=new FileReader("e:\\123.txt");
//2.创建一个字符读取缓冲流
BufferedReader bufferedReader=new BufferedReader(fileReader);
char []buf=new char[1024];
int count=0;
while ((count=bufferedReader.read(buf))!=-1){
System.out.println(new String(buf,0,count));
}
bufferedReader.close();
}
}
21.字符缓冲流(写入)
基本思路:
1.创建文件字符
2.创建文件字符缓冲区
3.写入数据
4. newLine() 写入一个换行符
import java.io.BufferedWriter;
import java.io.FileWriter;
public class Demo12 {
public static void main(String[] args) throws Exception {
//1.设置文件字符输出
FileWriter fileWriter=new FileWriter("e:\\147.txt");
//2.设置文件字符写的缓存区
BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
//3.开始写的操作
for (int i = 0; i <10 ; i++) {
bufferedWriter.write("你好,小明");
bufferedWriter.newLine(); //写入一个换行
}
System.out.println("项目完成");
//关闭文件
bufferedWriter.close();
}
}
(八).打印输出流(printWriter)
22.打印输出流
打印输出流 (原样输出)
1.PrintWriter()
import java.io.PrintWriter;
public class Demo13 {
public static void main(String[] args) throws Exception {
//1.创建打印流
PrintWriter printWriter=new PrintWriter("e:\\001.txt");
//2.打印
printWriter.println(91);
printWriter.println(true);
printWriter.println('a');
printWriter.println("123");
printWriter.close();
System.out.println("打印成功");
}
}
(九)、转换流(编码格式)
1.也叫做桥转换流:InputStreamReader/OutputStreamWriter
(1).可将字节流转换为字符流
(2).可设置字符的编码方式
切记 : 读的文件的编码格式需要和设置的编码格式要一致否则会乱码
(eg:utf-8 可以打印汉字 ,gbk 则会出现乱码)
23.输入转换流
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Demo14 {
public static void main(String[] args) throws Exception{
//1.创建一个输入流
FileInputStream fileInputStream=new FileInputStream("e:\\123.txt");
//2.创建一个输入转换流,并且把输入流放进转换流
InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream,"utf8"); //指定编码
int date=0;
while ((date=inputStreamReader.read())!=-1){
System.out.println((char)date);
}
inputStreamReader.close();
}
}
24.输出转换流
基本思路:
1.创建文件流
2.创建文件输出转换流
3.关闭
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Demo15 {
public static void main(String[] args) throws Exception{
//1.创建文件输出流
FileOutputStream fileOutputStream=new FileOutputStream("e:\\1217.txt");
//2.文件输出转换流
OutputStreamWriter outputStream=new OutputStreamWriter(fileOutputStream,"UTF-8");
for (int i = 0; i <10; i++) {
outputStream.write("你好,傻瓜");
outputStream.flush();
}
outputStream.close();
System.out.println("运行完毕!");
}
}
(十)、File类
概念:代表物理盘符中的一个文件或则文件夹
25.文件操作
基本思路:
1.创建文件
2.分隔符
3.删除文件
4.获取文件
5.判断文件
import java.io.File;
import java.util.Date;
public class Demo16 {
public static void main(String[] args) throws Exception {
separator();
fileOpe();
}
//1.分隔符
public static void separator(){
System.out.println("路径分割符:"+ File.pathSeparator);
System.out.println("名称分隔符:"+File.separator);
}
//2.文件操作
public static void fileOpe() throws Exception{
//1.创建文件
File file=new File("e:\\file.txt");
System.out.println(file.toString());
if (!file.exists()) {
boolean b = file.createNewFile();
System.out.println("创建的结果是:" + b);
}
//2.删除文件
//2.1直接删除
/* if (file.exists()){
file.delete();
System.out.println("删除成功");
}
//2.2使用jvm进行删除
file.deleteOnExit();
Thread.sleep(5000);
*/
//3.获取文件信息
System.out.println("获取文件的绝对路径: "+file.getAbsolutePath());
System.out.println("获取文件的路径 "+file.getPath());
System.out.println("获取文件的名称 "+file.getName());
System.out.println("获取父目录"+file.getParent());
System.out.println("就获取文件的长度:"+file.length());
System.out.println("获取创建时间:"+ new Date(file.lastModified()));
//4.判断
System.out.println("判断是否可写:"+file.canWrite());
System.out.println("是否是文件"+file.isFile());
System.out.println("是否是隐藏的:"+file.isHidden());
}
}
26.文件夹的操作:
基本思路:
1.遍历文件夹
2.创建文件夹
3.删除文件夹
4.判断文件夹的操作
5.获取文件夹信息
import java.io.File;
import java.util.Date;
public class Demo16 {
public static void main(String[] args) throws Exception {
directoryOpe();
}
public static void directoryOpe() throws Exception{
//1.创建文件夹
File dir=new File("e:\\aaa\\bbb\\ccc"); //d盘下面一个aaa目录,在下面bbb目录
System.out.println(dir);
if(!dir.exists()){
System.out.println("创建多级目录成功:"+dir.mkdirs());
}
//2.删除文件
/* //2.1直接删除
System.out.println("删除的结果是:"+dir.delete()); //删除底层目录并且文件内容为空的时候
//2.2使用jvm进行删除
dir.deleteOnExit(); //删除底层目录并且文件内容为空的时候
Thread.sleep(5000);
*/
//3.获取文件夹的信息
System.out.println("获取绝对路径:"+dir.getAbsolutePath());
System.out.println("获取路径"+dir.getPath());
System.out.println("获取文件的名字"+dir.getName());
System.out.println("获取父目录:"+dir.getParent());
System.out.println("获取创建时间"+new Date(dir.lastModified()).toLocaleString());
//4.判断
System.out.println("是否是文件夹"+dir.isDirectory());
System.out.println("是否被隐藏"+dir.isHidden());
//5.遍历文件夹
File file=new File("C:\\Users\\22612\\Pictures\\Screenshots");
//通过集合的方式获取信息
String []files=file.list();
System.out.println("------------------------------------");
for (String string : files){ //for增强遍历
System.out.println(string);
}
}
}
(十一)、FileFilter(文件过滤器)接口
27.文件过滤器
public interface FileFilter
2.
当调用File类中的listFiles()方法时,支持传入FileFilter接口接口实现类,
对获取文件进行过滤,只有满足条件的文件的才可出现在listFiles()的返回值中。
基本思路:
1.文件过滤器:可以获得指定的文件
2.endsWith(".jpg") 获得后缀为.jpg的文件。
3.适配器
import java.io.File;
import java.io.FileFilter;
import java.util.Date;
public class Demo16 {
public static void main(String[] args) throws Exception {
directoryOpe();
}
//3.文件夹的操作:
public static void directoryOpe() throws Exception{
//5.遍历文件夹
File file=new File("C:\\Users\\22612\\Pictures\\Screenshots");
//通过集合的方式获取信息
String []files=file.list();
System.out.println("------------------------------------");
for (String string : files){ //for增强遍历
System.out.println(string);
}
System.out.println("------------------FileFilter------------------");
File[] files2=file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if(pathname.getName().endsWith(".jpg")){
return true;
}
return false;
}
});
for (File file_1:files2) {
System.out.println(file_1.getName());
}
}
}
(十二)、递归遍历/递归删除
28.递归遍历(文件)
基本思路:
1.利用递归的操作,依次进入文件夹。当遇到文件夹的时候,我们就对其进行遍历
和输出.
import java.io.File;
public class Demo17 {
public static void main(String[] args) throws Exception {
list_dir(new File("E:\\aaa"));
}
public static void list_dir(File dir){
File[] files = dir.listFiles();
System.out.println("文件夹的信息"+dir.getAbsolutePath());
if(files!=null&&files.length>0){ //假如说文件/文件夹不为空,且长度大于0
for (File file_one: files
) {
if(file_one.isDirectory()){ //如果是文件夹就进行递归
list_dir(file_one);
}else {
//获取文件的绝对路径
System.out.println("文件的信息是:"+file_one.getAbsolutePath());
}
}
}
}
}
29.递归删除()
基本思路:
1.因为如果文件夹里面有文本,那么我们只有先删除文本,才能再次删除文件夹
import java.io.File;
public class Demo17 {
public static void main(String[] args) throws Exception {
delete_dir(new File("E:\\aaa"));
}
public static void delete_dir(File dir){
File[] files_one = dir.listFiles();
System.out.println("进入文件夹 "+dir.getAbsolutePath());
if(files_one!=null&&files_one.length>0){
for (File files_two:files_one
) {
if(files_two.isDirectory()){ //假如是文件夹
delete_dir(files_two);
}else{
System.out.println(files_two.getAbsolutePath()+"文件已被删除 "+files_two.delete());
}
}
}
System.out.println("删除文件夹"+dir.getAbsolutePath()+dir.delete());
}
}
(十三)、Properties
30.properties
properties:属性集合
特点:
1.存储属性名和属性值
2.属性名和属性值都是字符串类型
3.没有泛型
4.和流有关
基本知识:
1.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Properties;
import java.util.Set;
public class Demo18 {
public static void main(String[] args) throws Exception{
//1.创建集合
Properties properties=new Properties();
//2.添加数据
properties.setProperty("user_name","占山");
properties.setProperty("age","20");
System.out.println(properties.toString());
//3.遍历:
//3.1 keySet
//3.2 entrySet
//3.3 stringProperties.stringProprertyNames()
Set<String> strings = properties.stringPropertyNames(); //设置一个集合
for (String string_test:strings
) {
System.out.println(string_test+"===="+properties.getProperty(string_test)); //通过key即可
}
//4.和流有关的方法
PrintWriter printWriter=new PrintWriter("e:\\0303.txt"); //打印到e盘了
properties.list(printWriter);
printWriter.close();
//5.=========保存store========
//1.创建一个文件输出流
FileOutputStream fileOutputStream=new FileOutputStream("e:\\store.properties");
properties.store(fileOutputStream,"注释");
fileOutputStream.close();
//6.========load加载========
Properties properties1=new Properties();
FileInputStream fileInputStream=new FileInputStream("e:\\store.properties");
properties1.load(fileInputStream);
fileInputStream.close();
System.out.println(properties1.toString());
}
}