IO流(字节流、字符流)
IO概述
什么是IO
当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。
我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为 输入input 和 输出output ,即流向内存是输入流,流出内存的输出流。
Java中I/O操作主要是指使用 java.io 包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。
IO的分类
1、根据数据的流向分为:输入流和输出流
输入流:把数据从其他设备上读取到内存中的流
输出流:把数据从内存中写到其他设备上的流
2、根据数据的类型分为:字节流和字符流
字节流:以字节为单位,读写数据的流
子符流:以字符为单位,读写数据的流
1个字符 = 2个字节 1个字节 = 8个二进制位
IO的流向说明图解


顶级父类们

字节流
一切皆为字节
一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。所以,字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据

字节输出流(OutputStream)
java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。
定义了字节输出流的基本共性功能方法:
public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
public void write(byte[] b) :将 b.length字节从指定的字节数组写入此输出流。
public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
public abstract void write(int b) :将指定的字节输出流。
注意:
close()方法,当完成流的操作时,必须调用此方法,释放系统资源
FileOutputStream类
public FileOutputStream(File file):创建一个指定File对象表示的文件中 写入数据的文件输出流
public FileOutputStream(String name):创建一个具有指定名称的文件中 写入数据的输出文件流
参数:写入数据的目的地
file :目的地是一个文件夹
String name:目的地是一个文件
构造方法的作用:
1.创建一个FileOutputStream对象
2.会根据构造方法中传递的文件/文件路径,创建一个空的文件
3.会把FileOutputStream对象 指向创建好的文件
package day10; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; public class FileOutput { public static void main(String[] args) throws FileNotFoundException { //使用文件创建流对象 File file = new File("a.txt"); FileOutputStream fos0 = new FileOutputStream(file); //使用文件名称创建流对象 FileOutputStream fos1 = new FileOutputStream("b.txt"); } }
注意:
当创建一个流对象时,必须传入一个文件路径。该路径下,如果没有这个文件,会创建该文件。如果有这个文件,会清空这个文件的数据。
写出字节数据
写入数据的原理:(内存-->硬盘)
Java程序-->JVM(Java虚拟机)-->OS(操作系统)-->OS调用写数据的方法-->把数据写入到文件中
字节输出流的使用步骤:(重点)
1.创建FileOutputStream对象,构造方法中传递写入数据的目的地
2.调用FileOutputStream对象中的write()方法,把数据写入文件中
3.释放资源close()
1、写出字节
写出字节:write(int b)方法,每次可以写出一个字节数据
package day10; import java.io.FileOutputStream; import java.io.IOException; public class Xieru { public static void main(String[] args) throws IOException { //1.创建FileOutputStream对象,构造方法中传递写入数据的目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\File\\a.txt"); //2.调用FileOutputStream对象中的write()方法,把数据写入文件中 fos.write(97);//此处写入的数据为ASCall码--->a //3.释放资源close() fos.close(); } }
2、写出字节数组
public void write(byte[] b)
package day10; import java.io.FileOutputStream; import java.io.IOException; public class XieRuByteArr { public static void main(String[] args) throws IOException { //1.创建FileOutputStream对象,构造方法中传递写入数据的目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); //2.调用FileOutputStream对象中的write()方法,把数据写入文件中 //创建byte数组 byte[] bytes = {65,66,67,68,69};//ABCDE fos.write(bytes); //3.释放资源close() fos.close(); } }
在文件中显示100,需要写几个字节
package day10; import java.io.FileOutputStream; import java.io.IOException; public class XieRuByteArr { public static void main(String[] args) throws IOException { //1.创建FileOutputStream对象,构造方法中传递写入数据的目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); //2.调用FileOutputStream对象中的write()方法,把数据写入文件中 //创建byte数组 // byte[] bytes = {65,66,67,68,69};//ABCDE byte[] bytes = {49,48,48}; fos.write(bytes); //3.释放资源close() fos.close(); } }
注意:一次写多个字节
如果第一个字节是正数(0-127):那么显示的时候会查Ascall码表
package day10; import java.io.FileOutputStream; import java.io.IOException; public class XieRuByteArr { public static void main(String[] args) throws IOException { //1.创建FileOutputStream对象,构造方法中传递写入数据的目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); //2.调用FileOutputStream对象中的write()方法,把数据写入文件中 //创建byte数组 byte[] bytes = {65,66,67,68,69};//ABCDE fos.write(bytes); //3.释放资源close() fos.close(); } }
如果第一个字节是负数 :那么第一个字节和第二个字节,两个字节会组成一个中文显示,查询系统默认码表(GBK)
package day10; import java.io.FileOutputStream; import java.io.IOException; public class XieRuByteArr { public static void main(String[] args) throws IOException { //1.创建FileOutputStream对象,构造方法中传递写入数据的目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); //2.调用FileOutputStream对象中的write()方法,把数据写入文件中 //创建byte数组 byte[] bytes = {-65,66,67,-68,69};//緽C糆 fos.write(bytes); //3.释放资源close() fos.close(); } }
3、写出指定长度字节数组
public void write(byte[] b, int off, int len)
参数说明:
byte[]:byte数组
int off:数组的开始索引
int len:写几个字节
package day10; import java.io.FileOutputStream; import java.io.IOException; public class XieRuByteArr { public static void main(String[] args) throws IOException { //1.创建FileOutputStream对象,构造方法中传递写入数据的目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); //2.调用FileOutputStream对象中的write()方法,把数据写入文件中 //创建byte数组 byte[] bytes = {65,66,67,68,69}; fos.write(bytes,2,2);//CD //3.释放资源close() fos.close(); } }
3.1、补充--写入字符串
package day10; import java.io.FileOutputStream; import java.io.IOException; public class XieruString { public static void main(String[] args) throws IOException { //1.创建FileOutputStream对象,构造方法中传递写入数据的目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\File\\c.txt"); //2.调用FileOutputStream对象中的write()方法,把数据写入文件中 String str = "测试..."; fos.write(str.getBytes()); //3.释放资源close() fos.close(); } }
4、数据追加续写
FileOutputStream(File file,boolean append):创建文件输出流以写入由指定的 File对象表示的文件。
FileOutputStream(String name,boolean append):创建文件输出流以指定的名称写入文件。
参数:
File file、String name:写入数据的目的地
boolean append:追加写入的开关
true:创建对象不会覆盖源文件,继续在文件的末尾追加写数据
false:创建一个新文件覆盖源文件
package day10; import java.io.FileOutputStream; import java.io.IOException; public class XieRuzhuijia { public static void main(String[] args) throws IOException { //1.创建FileOutputStream对象,构造方法中传递写入数据的目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\File\\d.txt",true); //2.调用FileOutputStream对象中的write()方法,把数据写入文件中 for (int i = 1; i <=5 ; i++) { fos.write("追加".getBytes());//追加追加追加追加追加 } //3.释放资源close() fos.close(); } }
//输出不换行
5、写出换行
写换行:写换行符
windows:\r 或者 \n
Linux:/n
Mac:/r
package day10; import java.io.FileOutputStream; import java.io.IOException; public class XieRuzhuijia { public static void main(String[] args) throws IOException { //1.创建FileOutputStream对象,构造方法中传递写入数据的目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\File\\d.txt",true); //2.调用FileOutputStream对象中的write()方法,把数据写入文件中 for (int i = 1; i <=5 ; i++) { fos.write("追加 & 换行".getBytes()); fos.write("\r".getBytes());//可以用\n 也可以用\r } //3.释放资源close() fos.close(); } }
字节输入流(InputStream)
java.io.FileInputStream 类是文件输入流,从文件中读取字节
FileInputStream类
FileInputStream(File file) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
FileInputStream(String name) : 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
参数: 读取文件的数据源
file:文件的路径
name:文件
public class DuquGouzao { public static void main(String[] args) throws FileNotFoundException { //使用File对象创建流对象 File file = new File("C:\\Users\\YIAN\\Desktop\\File\\a.txt"); InputStream fis0 = new FileInputStream(file); //使用文件名创建流对象 InputStream fis1 = new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); } }
读取字节数据
读取数据的原理:
java程序-->JVM-->OS-->OS读取数据的方法-->读取文件
字节输入流的使用步骤:
1.创建FileInputStream对象,构造方法中绑定要读取的数据
2.使用FileInputStream对象中的方法read,读取文件
3.释放资源
1、读取字节
int read():从输入流中读取数据的下一个字节
package day10; import java.io.*; public class DuquGouzao { public static void main(String[] args) throws IOException { // 1.创建FileInputStream对象,构造方法中绑定要读取的数据 InputStream fis1 = new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); // 2.使用FileInputStream对象中的方法read,读取文件 //int read() 读取一个字节 int read = fis1.read(); while (read!=-1){ System.out.println(read);//67 -->A read-=1; } // 3.释放资源 fis1.close(); } }
注意:
int read()读取文件中的一个字节并返回,读取到文件的末尾返回-1
package day10; import java.io.*; public class DuquGouzao { public static void main(String[] args) throws IOException { // 1.创建FileInputStream对象,构造方法中绑定要读取的数据 InputStream fis1 = new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); // 2.使用FileInputStream对象中的方法read,读取文件 //int read() 读取一个字节 int i = 0; while ((i = fis1.read())!=-1){ System.out.print(" "+i+" ");//67 -->A System.out.print((char)i);// 67 C 68 D i--; } // 3.释放资源 fis1.close(); } }
2、使用字节数组读取
package day10; import java.io.FileInputStream; import java.io.IOException; public class DuquArr { public static void main(String[] args) throws IOException { //1.创建FileInputStream对象,构造方法中绑定要读取的数据 FileInputStream fis = new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); //2.使用FileInputStream对象中的方法read,读取文件 //定义字节数组 长度为2 byte[] bytes = new byte[2]; //每次读取两个字节 //fis.read(bytes); //System.out.println(new String(bytes));//所以输出 AB int len =0; while ((len=fis.read(bytes))!=-1){ System.out.print(new String (bytes)); } //ABCDE System.out.println(); //3.释放资源 fis.close(); } }
读取到文件的末尾返回-1
字节流练习:图片复制
1、复制原理图解
原理:从已有的文件中读取字节,将该字节写出到另外一个文件中

2、代码实现
package day10; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyPic { public static void main(String[] args) throws IOException { //读 目的地 FileInputStream fis = new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\test.png"); //写 目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\Tools\\b.png"); int len = 0; while ((len=fis.read())!=-1){ System.out.println(len); //写入到目的地文件夹 fos.write(len); } //关闭读取流 fis.close(); //关闭写入流 fos.close(); System.out.println("Finished!"); } }
package day10; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class CopyPic { public static void main(String[] args) throws IOException { //读 目的地 FileInputStream fis = new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\test.png"); //写 目的地 FileOutputStream fos = new FileOutputStream("C:\\Users\\YIAN\\Desktop\\Tools\\b.png"); // int len = 0; // while ((len=fis.read())!=-1){ // System.out.println(len); // //写入到目的地文件夹 // fos.write(len); // } //提高效率 byte[] bytes = new byte[1024]; int len = 0; while ((len=fis.read(bytes))!=-1){ fos.write(bytes); } //关闭写入流 fos.close(); //关闭读取流 fis.close(); System.out.println("Finished!"); } }
注意:
流的关闭原则:先开后关,后开先关
字符流
概述
当使用字节流读取文本文件时,可能会出现一个小问题。即遇到中文字符时,可能不会显示完整的字符(乱码),因为一个中文字符占用多个字节存储。所以java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。
例如发生的问题:
public class demo { public static void main(String[] args) throws IOException { //1.txt 内容 A安琪拉B123 FileInputStream fis = new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\1.txt"); int len =0; while ((len = fis.read())!=-1){ System.out.print((char)len);//Aå®çªæB123 //字母和数字不受影响 但中文变为乱码 } fis.close(); } }
字符输入流(reader)
java.io.Reader 抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。
public void close() :关闭此流并释放与此流相关联的任何系统资源。
public int read() : 从输入流读取一个字符。
public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。
FileReader类
java.io.FileReader 类是读取字符文件的遍历类。构造时使用系统默认的字符编码和默认字节缓冲区
1、构造方法
FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象。
FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称。
参数说明:
file、name :读取字符的目的地
2、读取字符数据
a、读取字符
package day10; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; public class demo { public static void main(String[] args) throws IOException { //1.txt 内容 A安琪拉B123 // FileInputStream fis = new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\1.txt"); FileReader fr = new FileReader("C:\\Users\\YIAN\\Desktop\\File\\1.txt"); int read = fr.read(); System.out.println(read);//65 System.out.println((char)read);//A fr.close(); } }
package day10; import java.io.FileInputStream; import java.io.FileReader; import java.io.IOException; public class demo { public static void main(String[] args) throws IOException { //1.txt 内容 A安琪拉B123 // FileInputStream fis = new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\1.txt"); FileReader fr = new FileReader("C:\\Users\\YIAN\\Desktop\\File\\1.txt"); int len =0; while ((len = fr.read())!=-1){ System.out.print((char)len);//A安琪拉B123 } fr.close(); } }
b、使用字符数组读取
package day10; import java.io.IOException; import java.io.FileReader; public class demo01 { public static void main(String[] args) throws IOException { //1.txt 内容 A安琪拉B123 FileReader fr = new FileReader("C:\\Users\\YIAN\\Desktop\\File\\1.txt"); char[] cbuf = new char[2]; int len = 0; while ((len = fr.read(cbuf))!=-1){ System.out.println(new String(cbuf)); /** * A安 * 琪拉 * B1 * 23 */ } fr.close(); } }
package day10; import java.io.IOException; import java.io.FileReader; public class demo01 { public static void main(String[] args) throws IOException { //1.txt 内容 A安琪拉B123 FileReader fr = new FileReader("C:\\Users\\YIAN\\Desktop\\File\\1.txt"); char[] cbuf = new char[10]; int len = 0; while ((len = fr.read(cbuf))!=-1){ System.out.println(new String(cbuf));//A安琪拉B123 } fr.close(); } }
字符输出流(writer)
java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。
void write(int c):写入单个字符。
void write(char[] cbuf) :写入字符数组。
abstract void write(char[] cbuf, int off, int len) :写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
void write(String str): 写入字符串。
void write(String str, int off, int len) :写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
void flush(): 刷新该流的缓冲。
void close() :关闭此流,但要先刷新它。
FileWriter类
1、构造方法
FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象。
FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称。
参数说明:
file、fileName:写入字符的目的地
public class W_demo { public static void main(String[] args) throws IOException { //使用File对象创建字符流 File file = new File("C:\\Users\\YIAN\\Desktop\\File\\a.txt"); FileWriter fw = new FileWriter(file); //使用文件名创建字符流 FileWriter fw2 = new FileWriter("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); } }
2、基本写出数据
1.写出字符: write(int b) 方法
package day10; import java.io.*; public class FileWrite_demo { public static void main(String[] args) throws IOException { //创建流对象 FileWriter fw = new FileWriter("C:\\Users\\YIAN\\Desktop\\File\\a.txt"); fw.write("Y"); fw.write("a"); fw.write(98); fw.write(30000); //刷新 fw.flush(); //关闭流 fw.close(); //写入结果:Yab田 } }
注意:
1.虽然参数为int类型四个字节,但是只会暴露一个字符信息写出
2.如果未调用close方法,数据只是保存到缓冲区,并不会写到文件中
关闭和刷新
因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据的。如果我们既想写出数据,又想继续使用流,就需要 flush 方法了。
flush:刷新缓冲区,流对象可以继续使用
close:先刷新缓冲区,然后释放资源。
package day10; import java.io.File; import java.io.FileWriter; import java.io.IOException; public class Writer_demo01 { public static void main(String[] args) throws IOException { //File file = new File("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); //file.createNewFile(); FileWriter fw = new FileWriter("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); fw.write("刷新"); fw.flush(); fw.write("写入"); fw.flush(); fw.write("关闭"); fw.flush(); fw.close(); fw.write("继续写?");//继续写 报错 java.io.IOException: Stream closed fw.close(); } }
2.写出字符数组
package day10; import java.io.FileWriter; import java.io.*; public class Write_demo02 { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); char[] chars = new char[]{'陈','易','安'}; fw.write(chars); fw.flush(); fw.close(); } }
注意:写入数据,都会把源文件内容清空掉,没有改文件会创建该文件,除非文件都是假的
3.写出字符串
package day10; import java.io.FileWriter; import java.io.*; public class Write_demo03 { public static void main(String[] args) throws IOException { FileWriter fw =new FileWriter("C:\\Users\\YIAN\\Desktop\\File\\b.txt"); fw.write("陈易安到此一游~"); fw.flush(); fw.close(); //陈易安到此一游~ } }
4、续写与换行
package day10; import java.io.FileWriter; import java.io.IOException; public class Write_demo04 { public static void main(String[] args) throws IOException { //末尾加,true表示追加 FileWriter fw =new FileWriter("C:\\Users\\YIAN\\Desktop\\File\\b.txt",true); //写换行符 fw.write("\n"); fw.flush(); //追加内容 fw.write("我又来啦~"); fw.flush(); fw.close(); /** * 陈易安到此一游~ * 我又来啦~ */ } }
IO异常的处理
在之前,我们一直把异常抛出(让JVM解决),实际开发中并不能这样处理,建议使用try...catch...finally代码块,处理异常部分。
例如:
package day10; import java.io.FileWriter; import java.io.IOException; public class demo02 { public static void main(String[] args) { //声明变量 FileWriter fw = null; try { fw = new FileWriter("C:\\Users\\YIAN\\Desktop\\File\\a.txt"); fw.write("测试鸭~"); fw.flush(); } catch (IOException e) { e.printStackTrace(); }finally { try { if(fw!=null){ fw.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
属性集
概述
java.util.Properties集合 extends Hashtable<k,v> implements Map<k,v>
java.util.Properties类表示一个持久的属性集,可以保存在流中或从流中加载。
java.util.Properties集合是一个唯一和IO流相结合的集合
可以使用java.util.Properties集合中的store,把集合中的临时数据持久化写入到硬盘存储
可以使用java.util.Properties集合中的load,把硬盘中保存的文件(键值对),读取到集合中使用
注意:
java.util.Properties集合是一个双列集合,key和value默认都是字符串
properties类
1、构造方法
public properties():创建一个空的属性列表
2、基本存储方法:
public Object setProperty(String key, String value) : 保存一对属性。
public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。
public Set<String> stringPropertyNames() :所有键的名称的集合。
package day10; import java.util.Iterator; import java.util.Properties; import java.util.Set; public class Properties_demo { public static void main(String[] args) { //创建属性集对象 Properties pts = new Properties(); //添加键值对元素 k,v都是String型的 pts.setProperty("陈奕迅","爱情转移"); pts.setProperty("林俊杰","江南"); pts.setProperty("刘莱斯","浮生"); //打印实现集对象 System.out.println(pts);//{刘莱斯=浮生, 林俊杰=江南, 陈奕迅=爱情转移} //通过key 获取value System.out.println(pts.getProperty("陈奕迅"));//爱情转移 System.out.println(pts.getProperty("林俊杰"));//江南 System.out.println(pts.getProperty("刘莱斯"));//浮生 //遍历属性集 Set<String> str = pts.stringPropertyNames(); for (String s:str ) { System.out.println(s+"--->"+pts.getProperty(s)); //刘莱斯--->浮生 //林俊杰--->江南 //陈奕迅--->爱情转移 } //使用迭代器(复习) Set<String> str01 = pts.stringPropertyNames(); Iterator<String> it = str01.iterator(); while (it.hasNext()){ String key = it.next(); System.out.println(key+"______"+pts.getProperty(key)); /** * 刘莱斯______浮生 * 林俊杰______江南 * 陈奕迅______爱情转移 */ } } }
3、与流相关的方法
public void store(FileWrite,String comments):将Properties中的临时文件,存储到硬盘
使用步骤
* 1.创建properties集合对象 添加数据
* 2.创建字符输出流/字符输出流对象,构造方法绑定要输出的目的地
* 3.使用Properties集合中的store方法,把临时数据,持久化写入到硬盘
* 4.释放资源
package day10; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; import java.util.Set; public class store { public static void main(String[] args) throws IOException { //1.创建properties集合对象 添加数据 Properties pts = new Properties(); pts.setProperty("陈奕迅","爱情转移"); pts.setProperty("林俊杰","江南"); pts.setProperty("刘莱斯","浮生"); //2.创建字符输出流/字符输出流对象,构造方法绑定要输出的目的地 File file = new File("C:\\Users\\YIAN\\Desktop\\File\\e.txt"); file.createNewFile(); FileWriter fw = new FileWriter("C:\\Users\\YIAN\\Desktop\\File\\e.txt",true); //3.使用Properties集合中的store方法,把临时数据,持久化写入到硬盘 pts.store(fw,"save data"); fw.close(); } }
public void load(InputStream inStream) : 从字节输入流中读取键值对。
参数中使用了字节输入流,通过流对象,可以关联到某文件上,这样就能够加载文本中的数据了。
我写在文件中的格式:

代码演示:
package day10; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; import java.util.Set; public class Properties_demo01 { public static void main(String[] args) throws IOException { //创建属性集对象 Properties pts = new Properties(); //加载文本中信息到属性集 pts.load(new FileInputStream("C:\\Users\\YIAN\\Desktop\\File\\b.txt")); //遍历集合并打印 Set<String> str = pts.stringPropertyNames(); // System.out.println(str); for (String key:str ) { System.out.println(key+pts.getProperty(key)); /** * key02----world * key01----hello * key03----! */ } } }


浙公网安备 33010602011771号