【java中IO】

首先明确字符流字节流的概念和区别;

字节:是主要的数据存储方式(文字对象数据视频等),任何东西在磁盘上存储都是以字节为单位的。
字符:通常是把相邻的两个字节按照一定形式编码得到的,它表示文字。
字符流:字符流是由Java虚拟机将字节流转化为2个字节的Unicode字符为单位的字符而成的;处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串;
字节流:在读取文件时,一个字节一个字节地读取以形成的字节序列。


在IO过程中,对于不同类型的的文件,需要不同的IO过程

1.对于中文文字之类的字符型文档:

O过程:outputstream(最低层的,只能输出字节流)--------OutputStreamWriter(最上层的,让你填写目标字符编码类型,它把你的输入字符流转化为字节流)-----------BufferedWriter(中层的,它提供了一个缓冲区,防止你骚扰硬盘)。
I过程:inputstream(最底层的,字节流)---------InputStreamReader(中层,给一个编码参数,它把字节流转化为字符流)------------BufferedReader(上层,他方便地给你很多方法让你读取,提供缓冲区)

2.图片帧(带有图片信息头和数据体的结构),音频流(带有包含音频的信息头和数据的结构),视频流(带有包含视频信息的头和数据的结构)等文件;
I过程:fileinputstream(最低层,字节流)-------BufferedInputStream(缓冲字节流,稍微快一些但是还是字节流,一次read()只有一个字节)-------创建一个字节数组然后进行操作;
O过程:fileoutputstream(字节流,中层)-------BufferedOutputStream(缓存输出字节流-------下层)--------创建字节数组只要还有值,就用while循环写入。


下面谈谈这些乱七八糟的的对象。

1.FILE对象
构造:
File name=new File(“path”);
文件方法:
对象名.createNewFile()//创建新文件。
对象名.delete()//直接从磁盘上删除
对象名.exists()//查询磁盘中的文件是否存在
对象名.getAbsolutePath()//获取绝对路径
对象名.getPath()//获取相对路径
对象名.getName()//获取文件名 相当于调用了一个toString方法。
对象名.isFile()//判断是否是文件
对象名.length()//查看文件中的字节数
目录方法:
对象名.exists()//查询目录是否存在
对象名.isDirectory()//查询文件文件夹是否存在
对象名.isFile()//查询文件是否存在
对象名.mkdir()//创建单层目录
对象名.mkdir()//创建多层目录
对象名.delete()//删除目录
对象名.getParentFile()//获取cc目录的父级目录。
对象名.list()//返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
对象名.listFiles//返回一个字符串。命名由此抽象路径名表示的目录中的文件和目录。可以获取相对路径和绝对路径,可以对文件进行操作。

一个File对象而可以代表一个文件或目录, File可以实现获取文件和目录属性等功能, 可以实现对文件和目录的创建,删除等功能
File类操作目录与文件的常用方法有哪些

2.BufferedReader对象

  • 极为科学和完备的缓冲区,支持各种类型,把水接满后才会倒(写入)。

-构造:放个字节流/字符流/读取器

  • 方法:read()读一个字符;;在循环条件中每次调用应有接收量来防止内容丢失。while(( recv=br.read())!=null);这样便可。
  • 方法:readline()读出一行字符。

在IO中使用。
3.BufferedWriter对象

  • 极为科学和完备的缓冲区,支持各种类型,把水接满后才会倒(写入)。
  • 方法:newline()方法:(具有跨平台性),众所周知不同平台换行有差别,linux(\n) ,windows(\n\r),mac(\r)。
  • 方法:write(“你程序中获得的对象/字符串”);
  • 方法:.flush();.close();
try{
       FileWriter fw=new FileWriter("c:\\");
       BufferedWriter bw=new BufferedWriter(fw);
       bw.write("你程序中获得的对象/字符串");
       bw.flush();
       bw.close();
       
   }
   catch (IOException e){
   	System.out.println(e);
   					 }

4.OutputStreamWriter/InputStreamReader类。
OutputStreamWriter字节流:是从字符流到字节流的桥接:使用指定的字符集将写入其中的字符编码为字节。它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集。
InputStreamReader字符流:是从字节流到字符流的桥接器:它使用指定的字符集读取字节并将它们解码为字符。 它使用的字符集可以通过名称指定,也可以明确指定,或者可以接受平台的默认字符集


5.FileReader/FileWriter对象 (用的少)

Filereader:

  • 1.僵硬的缓冲区,read一次只读一个字符。
  • 2.方法fr.read()每次被执行,都会返回文件数据,在没有数据时会返回值-1,其常用来放在while循环条件中。
  • 3.fr没有flush方法哦,fw才有flush方法提供清空缓存并写入。
try
		{
FileReader fr =  new  FileReader(filepath);

while((m_re = fr.read)  != -1  )
	{System.out.println(m_re);}


fr.close();
       
    }
catch (IOException e){System.out.println(e); }

FileWriter

  • FileWriter先使用fw.wirte("");将内容写入自带的芝麻大的缓冲区然后再使用fw.flush();将内容写入文件。
  • FileWriter的默认缓冲区是非常小的,如果你写入一个略大于此缓冲区的数据,需要两次或者n次写入硬盘的过程,而如果用BufferedWriter只需一次。
  • fr.flush()方法用以清空缓存并将缓存中的内容写入文件
  • fr.close()清空缓存并将缓存中的内容写入文件然后关闭filewirter。
try{
        FileWriter fw=new FileWriter("c:\\ddd.txt");
        
        fw.write("你程序中获得的对象/字符串");
        fw.flush();
        fw.close();

    }
    catch (IOException e){System.out.println(e);

    }//要注意频繁的硬盘写入和文件内容丢失
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值