【小白学Java】D30》》》IO流 之字符流 & 属性集(Properties集合)

在这里插入图片描述



【友情链接】➡➡▶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);
  }

测试结果:
在这里插入图片描述



三连走起来!兄弟们,给点鼓励。。。。。

在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北慕辰

你的鼓励是小北最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值