Java学习_Day20

今天Java学习内容:
一、IO流的概述和分类
二、字节流
三、字符流
四、IO流异常处理
五、Properties集合

一、IO流的概述和分类
理解:IO流是用来读写数据的

1.按照流向分类
输入流:硬盘(文件)–>内存(Java程序)
输出流:内存(Java程序)–>硬盘(文件)

2.读写数据分类
字节流:可以读写任何数据(文本、图片、声音、视频…)
InputStream(字节输入流)
OutputStream(字节输出流)

字符流:只能读写文本数据(使用记事本软件打开能看懂的文件,就是文本文件)
Reader(字符输入流)
Writer(字符输出流)

3.使用流的步骤
1)创建流对象(搭桥)
2)读/写数据(过桥)
3)释放资源(拆桥)

在这里插入图片描述
二、字节流
1.字节输出流写数据

	//1)创建字节流对象(搭桥),关联一个文件
		//注意:文件不存在,会自动创建;如果文件存在,会覆盖原来的文件。
		FileOutputStream fos=new FileOutputStream("day09-code\\a.txt");

		//2)写数据(过桥)
		//一次写一个字节数据
		fos.write(97); //a
		fos.write(98); //b
		fos.write(99); //c
		fos.write(100); //d

		fos.write("\r\n".getBytes()); //换行

		//一次写多个字节数据(字节数组)
		byte[] bs={97,98,99,100};
		fos.write(bs); //abcd

		//一次写字节数组的一部分
		fos.write(bs,1,2); //bc

		//利用字节流写一个字符串(把字符串转换为字节数组)
		fos.write("helloworld".getBytes());
		fos.write("\r\n".getBytes()); //换行
		fos.write("Java".getBytes());

		//3)释放资源(拆桥)
		fos.close(); 

2.字节输入流读数据

	//1)创建输入流对象(搭桥),关联读取的文件路径
        //注意:文件必须存在,才能读取
        FileInputStream fis=new FileInputStream("day09-code\\a.txt");

        //2)读数据(过桥) 一次读多个字节 
        byte[] bs=new byte[1024];  
		
        int len; //记录每次读取的有效字节个数 
        while((len=fis.read(bs))!=-1){
            //把有效的字节个数,转换为字符串
            String str=new String(bs,0,len); 

            System.out.println(str);
        }

        //3)释放资源(拆桥)
        fis.close(); 

3.字节流文件复制

		需求:把day09-code\\a.txt文件,复制到 daoy-code\\b.txt文件中
	
		//源文件:day09-code\\a.txt
        FileInputStream fis=new FileInputStream("day09-code\\a.jpg");
        //目标文件:daoy-code\\b.txt
        FileOutputStream fos=new FileOutputStream("day09-code\\b.jpg");

        //一边读一边写
        byte[] bs=new byte[1024];
        int len; //记录每次读取的有效字节个数

        while ((len=fis.read(bs))!=-1){
            //把得到的字节中有效的部分,写到文件中
            fos.write(bs,0,len);
        }

        //释放资源
        fis.close();
        fos.close(); 

三、字符流
由于字节流读取数据是【以字节为单位】,由于中文和字母占用的字节数不一样,可能会出现乱码。
所以Java给开发者提供了字符流,专门用来读取文本文件,【以字符为单位】来读取数据。

Reader父类(抽象)
–InputStreamReader(转换流)
–FileReader(读取文本中的字符,默认按照UTF-8编码进行读取)

Writer父类(抽象)
–OutputStreamWriter(转换流)
–FileWriter(写入字符数据,默认按照UTF-8编码进行写入)

1.字符流读取文本文件

		//1)创建输入流对象(搭桥),关联读取的文件路径
        //注意:文件必须存在,才能读取
        FileReader fr=new FileReader("day09-code\\a.txt");

        //2)读数据(过桥) 一次读多个字符
        char[] bs=new char[1024];
		
        int len; //记录每次读取的有效字符个数
        while((len=fr.read(bs))!=-1){
            //把有效的字符个数,转换为字符串
            String str=new String(bs,0,len); 

            System.out.println(str);
        }

        //3)释放资源(拆桥)
        fr.close(); 

2.字符流写入文本文件

//1)创建FileWiter流对象(搭桥)
        //true: 表示在文件末尾续写
        FileWriter fw=new FileWriter("day09-code\\b.txt",true);

        //2)写数据(过桥)
        //直接写入字符串
        fw.write("奔驰,让女人坐在引擎盖上哭\r\n");
        fw.write("\r\n");
        fw.write("宝马,让女人坐在车里哭\r\n");
        fw.write("凤凰,让女人坐在自行车上笑\r\n");

        //写入真个字符数组
        char[] chs={'a','b','c','车','水','马','龙'};
        fw.write(chs);
        fw.write("\r\n");

        //写入字符数组的一部分
        fw.write(chs,1,5);
		fw.flush(); //把数据刷新到文件中

        //3)释放资源(拆桥)
        fw.close(); //先自动刷新,再释放资源

3.字符流复制文件

//源文件:day09-code\\a.txt
		FileReader fr=new FileReader("day09-code\\a.txt");
		//目标文件: day09-code\\b.txt
		FileWriter fw=new FileWriter("day09-code\\b.txt");
		
		//读写数据
		char[] chs=new char[1024];
		int len; //记录每次读取的有效字符个数
		while((len=fr.read(chs))!=-1){
			//写入有效字符个数到文件
			fw.write(chs,0,len);
		}

		//释放资源
		fr.close();
		fw.close();

四、IO流异常处理
选中有异常的代码(红色波浪线),添加 try…catch
快捷键:ctrl+alt+T

	public static void main(String[] args)  {

        FileWriter fw=null;
        try {
            fw=new FileWriter("day09-code\\c.txt");
            fw.write("HelloWorld");

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
			//如果fw表示的对象创建失败,那么fw就为null.
            if(fw!=null){
                try {
                    fw.close(); 
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } 
    }
	

五、Properties集合
Properties的继承结构
Map(接口)
–HashMap
–Hashtable
–Properties

Properties也是一个双列集合,键和值都只能是字符串类型
Map集合有的方法,Properties都可以使用。

Properties还有一些特有的方法
String getProperty(String key)
获取根据键获取值
Object setProperty(String key, String value)
往集合中添加键和值。
注意:如果键重复,返回被覆盖的值

void store(OutputStream out, String comments)
把集合中的键值对,存储到文件中

void load(InputStream inStream)
把文件中的键值对,读取到集合中

软件试用案例:

Properties pro=new Properties();
        //读取配置文件
        pro.load(new FileReader("day09-code\\config.properties"));

        //获取配置文件中count对应的值 value
        String value = pro.getProperty("count");
        //把字符串的value转换为整数
        int count = Integer.parseInt(value);
        //对count的值进行判断
        if(count>0){
            //如果大于0(说明还有试用次数),继续使用再让count--;
            count--;
            System.out.println("欢迎使用本软件,还剩"+count+"次机会");

            //把新的值再写回配置文件中
            pro.setProperty("count",count+"");
            pro.store(new FileWriter("day09-code\\config.properties"),"");
        }else{
            System.out.println("不好意思,使用次数已到,请充值!!!");
        } 
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值