java 知识点 IO

IO流:流是一组有顺序的 有起点和终点的字节集合,对数据传输的总称或抽象,数据在两设备的传输,流的本质是数据传输,根据传输特性将流抽象为各种类;

I:input 输入;

O:output 输出;

节点流:直接操作数据源;

处理流:对其他流进行处理;

四大抽象类:

InputStream:

OutputStream:

Reader:

Write:

文件流

FileInputStream:打开文件  读取文件中的数据,

读取文件 先找到他

              绝对位置 以系统根目录为准

              相对位置./ 表示当前目录

                      ../表示上级目录

                      ../../表示上上级目录

字节输入流:按照字节的方式进行数据读取

创建字节输入流

  传入文件路径 用于打开该文件获取数据

  绝对路径

  FileInputStream fis=new FileInputStream("D:\\a.txt");

  在eclipse中 ./定位当前项目,并不是当前文件

  相对路径

read方法重载  可以传递一个数组 一次读取会把该数组读满 然后一次性返回

   返回int类型 为读取当前的个数 如果达到文件末尾 返回-1

   

   数组就相当于一个缓冲区 效率有所提升 

//available:可读取的字节数
			System.out.println(fis.available());
			//数组容量并不是越大效率越高 容量和数据大小刚好一致的时候效率最高
			byte[]bytes=new byte[fis.available()];
			int temp=0;
			while((temp=fis.read(bytes))!=-1){
				//把字节数组 转换为字符串 可能出现数据重复问题
				//System.out.println(new String(bytes));
				//因为read返回的是当前次读取的元素个数 所以我们可以指定读多少  转换多少
				//数组 起始位置(包含),个数
				System.out.println(new String(bytes,0,temp));

 

把字节数组 转换为字符串 可能出现数据重复问题

System.out.println(new String(bytes));

因为read返回的是当前次读取的元素个数 所以我们可以指定读多少  转换多少

数组 起始位置(包含),个数

FileReader : 一次读取一个字符,也就是两个字节,主要用于读取纯文本文件,解决乱码问题
  
  read() : 一次读取一个字符,返回对应的ASCII码,达到文件末尾返回-1
  
  read(char[]) : 一次读取一个字符数组,提高读取效率,返回本地读取的字符个数,到达文件末尾返回-1

FileOutputStream  字节输出流  
     用于把数据写出到指定文件中 
  如果指定文件不存在 会自动创建该文件  但是不会创建目录(不会创建文件夹)   

try(FileOutputStream fos=new FileOutputStream("D:/a.txt")){
			//写出对应ASCII码
			fos.write(97);
			byte[]bytes={97,98,99};
			//写出数组
			fos.write(bytes);
			
			//不能直接写出字符串
			String str="你好吗";
			//getBytes:把该字符串转换为字节数组
			fos.write(str.getBytes());
			//刷新缓存,强制持久化
			fos.flush();
	//覆盖写入 当创建该文件的输出流对象的时候 就会把文件内部全部内容清除
		//FileOutputStream fos1=new FileOutputStream(D:/a.txt");
		
		//创建对象时 传入第二参数true 说明是追加写入 则不会清空该文件
		FileOutputStream fos1=new FileOutputStream("D:/a.txt",true);
		fos1.write(98);

创建字符输入流
        FileReader fr=new FileReader("./src/day_01/Test_01.java");
        创建字符输入缓冲流对象
        BufferedReader br=new BufferedReader(fr);
        br.readLine():读取一行数据 返回读取到这一行数据的内容 为String 到达文件末尾返回null;
        String temp=null;
        while((temp=br.readLine())!=null){
            System.out.println(temp);

//创建字符输出流
		FileWriter fw=new FileWriter("D:/a.txt");
		//创建字符输出缓冲流
		BufferedWriter bw=new BufferedWriter(fw);
		//写出
		bw.write("你好吗");
		//换行
		bw.newLine();
		bw.write("你管得着吗");
		//刷缓存
		bw.flush();

 数据流 是为了不同平台之间数据读取的统一性 Linux windows 等操作系统对数据进行存储的时候 方式是不同的 
  为了解决之间的差异性 java提供了两个轻量级的方法 只要每个平台有java环境 就能保证数据的一致性
  比如 在进行网络协议传输的时候  是非常适用的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值