【友情链接】➡➡▶IO流 之 File类 & 递归
【友情链接】➡➡▶IO流 之 过滤器 & 字节流
【友情链接】➡➡▶IO流 之字符流 & 属性集(Properties集合)
【友情链接】➡➡▶IO流 之 缓冲流 & 转换流
【友情链接】➡➡▶IO流 之 序列化流 & 打印流
制作不易,各位友友们,大佬们给点鼓励!
点赞👍 👍 👍 收藏+关注 一键三连走起!
一、字符流
当使用字节流读取文本文件时,如果遇到了中文字符时,可能会遇到字符无法完整的显示出来,因为,一个中文字符可能会占用多个字节来存储,因此,Java中提供了一些字符流类,以字符为单位来进行读写数据,专门用来处理文本文件。
二、字符输入流 Reader
在java.io包下的Reader抽象类,是用于读取字符流的所有类的根类,它可以将读取的字符信息传到内存中。
Reader中定义了一些基本的共性方法:
public void close(): 关闭此流并释放与此流相关联的任何系统资源。
public int read(: 从输入流中读取一个字符。
public int read(char[ ] cbuf):
从输入流中读取一些字符,并将它们存储到字符数组 cbuf中,
三、文件字符输入流 FileReader
FileReader extends InputStreamReader extends Reader
FileReader流的作用就是把硬盘文件中的数据以字符的方式读取到内存中去
FileReader的构造方法:
FileReadcr(String fileName )
FileReaden(File file)
注意:
1.构造方法中传递的参数就是要读取文件的数据源
2.String fileName :文件的路径 File file:文件类的对象
构造方法的作用;
1.创建一个FileReader类的对象
2.将FileReoder类的对象指向要读取的文件(fileName/file)
四、 字符输入流的使用步骤
1.创建FileReader类的对象并在构造方法中指定要读取的数据的路径
2.调用FileReader类的对象中的read()方法读取文件
3.调用close()方法, 释放内存资源
复习一下String类的两个构造方法:
String(char[] value) :
将字符数组转换为字符串
String(char[] value,int off,int count)
将字符数组中的一部分转换为字符串,从偏移量off开始的count长度
实例代码演示:
// 1.创建FileReader类的对象并在构造方法中指定要读取的数据的路径
FileReader fileReader = new FileReader("D:\\BigData\\java\\javalearn\\src\\com\\data\\data1.txt");
// 2.调用FileReader类的对象中的read()方法读取文件
//2.1 public int read(: 从输入流中,读取一个字符。
// int sum=0;
// while ((sum=fileReader.read())!=-1){
// System.out.print((char)sum);
// }
//2.2 public int read(char[ ] cbuf):
// 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中,
char[] cbuf=new char[1024];
while (fileReader.read(cbuf)!=-1){
System.out.print(new String(cbuf));
}
// 3.调用close()方法, 释放内存资源
fileReader.close();
测试结果:
五、字符输出流Write
在java.io包下的Writer抽象类,是用于写出字符流的所有类的根类。主要作用是指将指定的字符信息写出到指定的目的地。
Writer抽象类中定义了一些字节输出流的基本共性方法:
void write(int c) 写入单个字符
void write(char[]cbuf) 写入字符数组
abstractvoid write(char[] cbuf,int off,int len)
写入字符数组的某部分, 从off偏移量开始,写入len个字符数
void write(String str) 写入字符串
void write(String str,int off,int lenb)
写入字符串的某部分,从off偏移量开始,写入lenb个字符数
void flush() 剧新该流的缓冲
void close() 关闭此流,但要先刷新它
六、文件字符输出流FileWriter
在java.io包下的FileWriter类继承了OutputStreamWriter extends Writer FileWriter的作用就是把内存中的字符数据写人到文件中去,
FileWriter类的构造方法:;
FileWriter(File fite ):
根据给定的File对象控造一个FiLewriter类的对象。FileWriter(String fileName):
根据给定的文件名来构造一个FlleWriter类的对象
参数为要写入数据的目的地
File file: 文件
String fiLeName : 文件的路径
构造方法的作用:
1.创建一个FiLeWriter类的对象
2.狠据构造万法中传递的(file/fileName)创建文件
3.将FileWriter类的对像指向创建好的文件
七、字符输出流的使用步骤
1-创建一个FileWriter类的对象并在构造方法中指定要写入数据的文件路径
2.使用FileWriter类中的write()方法,将数据写入到内存缓冲区中
(该过程就是将字符转换为字节的过程)
3.使用FileWriter中的flush()方法,将内存缓冲区中的数据,刷新到文件中
4.调用close()方法,释放资源
(该方法会先将内存缓冲区中的数据刷新到交件中后再关闭资源)
示例代码;
//1.创建一个FileWriter类的对象并在构造方法中指定要写入数据的文件路径
FileWriter fileWriter = new FileWriter("D:\\BigData\\java\\javalearn\\src\\com\\data\\data1.txt");
//2.使用FileWriter类中的write()方法,将数据写入到内存缓冲区中
//fileWriter.write(98);
String str="欢迎来到北慕辰的博客";
fileWriter.write(str);
//3.使用FileWriter中的flush()方法,将内存缓冲区中的数据,刷新到文件中
fileWriter.flush();
//4.调用close()方法,释放资源
fileWriter.close();
}
注意
flush()方法和close()方法的区别:
- flush() : 刷新缓冲区之后,流对象可以继续使用。
- close(): 先刷新缓冲区,之后再通知系统释放资源。调用close()方法之后,流的对象就不可以再被使用了。
八、字符输出流的 续写 和 换行写
1. 续写: 使用有两个参数的杓造方法
FileWriter( Sting fileName , boolean append )
FileWriter(File file, boolean append )
注意;
String fiLeName , File file: 参数表示为要写入数据的路径
boolean append:
true:不会创建新的文件覆盖源文件,也就是可以统写
false: 会创建一个新的文件覆盖源文件,不可以续写
2.换行写入数据
Windows : \r\n
Linux: : /n
Mac : /r
代码实例:
//1.创建一个FileWriter类的对象并在构造方法中指定要写入数据的文件路径
FileWriter fileWriter = new FileWriter(
"D:\\BigData\\java\\javalearn\\src\\com\\data\\data1.txt",true);
//2.使用FileWriter类中的write()方法,将数据写入到内存缓冲区中
fileWriter.write("abc");
fileWriter.write("欢迎,大佬");
//换行写
String s="北慕辰的博客";
for (int i = 0; i < 3; i++) {
fileWriter.write(s);
fileWriter.write("\r\n");
}
//3.使用FileWriter中的flush()方法,将内存缓冲区中的数据,刷新到文件中
fileWriter.flush();
//4.调用close()方法,释放资源
fileWriter.close();
测试结果;
九、属性集
9.1Properties类
java.util 包下的Properties类 继承了Hashtable,该类是用来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。也就是说, Properties集合是双列集合,key和value都是字符串,
java.util. Properties extends Hashtable<k , v> implenents Map<k,v>
注意:
- Properties 类表示一个持久的属性集。
- Properties集合可保存在流中或从流中加载。
- properties集合是一个唯一和IO流相结合的集合
- Properties集含中的方法store () 用于把集合中的临时数据,持久化写入到硬盘中存储
- Properties集合中的方法load() 用于把硬盘中保存的文件(键值对),读取到集合中使用
- 属性列表中每个键以及对应的值都是学符串。
Properties集合有一些操作字符串的特有方法:
Object setProperty(String key,String value)
调用Hashtable的方法put
String getProperty(String key)
根据key找到value值,相当于Map集含中的get(key)方法
Set<String> stringPropertyNames()
返回此属性列表中的键集,其中该键及其对应值是字符串,
相当于Map集合中的keyset()方法
示例代码:
//创建Properties集合
Properties pp = new Properties();
//向集合中添加元素Object setProperty(String key,String value)
pp.setProperty("张三","178");
pp.setProperty("李四","170");
pp.setProperty("王五","186");
//Set<String> stringPropertyNames()
Set<String> stringPropertyNames = pp.stringPropertyNames();
//遍历打印
for (String key : stringPropertyNames) {
// System.out.println(s);
String property = pp.getProperty(key);
System.out.println(key+"---"+property);
}
store()方法
使用Properties中的store ()方法,将集合中的临时数据持久化写入到硬盘中存储起来
void store ( OutputStream out,String comments)
void store ( Writer writer, String comments)
参数:
OutputStream out: 字节输出流,不能写入中文字符
wiriter writer: 字符输出流,可以写中文字符
String comments:
对文档进行注释,解释说明保存的文件的用途
不能使用中文否则会产生乱码,默认编码为unicode
一般使用空字符串
使用步骤:
1.创建Properties集合的对象并添加数据
2.创建字节输出流/字符输出流的对象并在构造方法中指定要输出的路径
3.使用Properties中的store()方法,
将集合中的临时数据持久化写入到硬盘中存储
4-释放资澜
示例代码:
// 1.创建Properties集合的对象并添加数据
Properties properties = new Properties();
properties.setProperty("王五","168");
properties.setProperty("张三","178");
properties.setProperty("李四","170");
// 2.创建字节输出流/字符输出流的对象并在构造方法中指定要输出的路径
FileWriter fileWriter = new FileWriter(
"D:\\BigData\\java\\javalearn\\src\\com\\data\\data2.txt");
// 3.使用Properties中的store()方法,
// 将集合中的临时数据持久化写入到硬盘中存储
properties.store(fileWriter,"sava person's name and high");
// 4-释放资澜
fileWriter.flush();
fileWriter.close();
测试结果;
load()方法
使用Properties中的load()方法,把硬盘中保存的文件(键值对),读取到集合中
可以使用方法;
void load ( InputStreanm instream )
void load ( Reader reader )
参数:
InputStream instream; 字节输入流,不能读取含有中文的键值对
Reader reader: 字符输入流, 可以读取含有中文的键值对
使用步骤:
1.创建Properties集合对象
2.使用Properties集合对象中的方法Load读取保存键值对的文件
3.遍历properties集合
注意:
1.存储键值对的文件中,键与值默认的连接符号可以使用=、空格(或者其他符号)
2,存储键值对的文件中,可以使用#进行注释,被注释的键值对不会再被读取
3.存储键值对的文件中,键与值默认都是字符串,不用再加引号
示例代码:
// 1.创建Properties集合对象
Properties properties = new Properties();
// 2.使用Properties集合对象中的方法Load读取保存键值对的文件
properties.load(
new FileReader("D:\\BigData\\java\\javalearn\\src\\com\\data\\data2.txt"));
// 3.遍历properties集合
Set<String> set = properties.stringPropertyNames();
for (String key : set) {
String value = properties.getProperty(key);
System.out.println(key+"-->"+value);
}
测试结果:
三连走起来!兄弟们,给点鼓励。。。。。