Java-IO流-字节流字符流

IO(Input Output)流

IO流用来处理设备之间的数据传输

Java对数据的操作是通过流的方式

Java用于操作流的对象都在IO包中

流按照操作数据分为两种:字节流和字符流

流按照流向分为:输入流和输出流

输入流和输出流是相对于内存设备而言;

简单来说,输入流就是将外设中的数据输入到内存中做运算,而输出流就是将内存中的数据写入到外设中。输入部分就是读,输出部分就是写,进行数据的流动。

字节流&字符流

字节流:输入和输出数据的特点就是全部都是以字节为单位的二进制,用来处理字节的流对象就是字节流;

字符流:字节流读取文字字节数据后,不直接操作而是先查找指定的编码表,获取对应的文字,再对这个文字进行操作,简单而言:字符流就是字节流+编码表

字节流的抽象基类(顶层父类):InputStream  OutputStream

字符流抽象基类(顶层父类):Reader Writer

字符流-FileWriter

例如:需求:将一些文字存储到硬盘的一个文件中,如果要操作文字数据,建议优先考虑字符流,而且要将数据从内存写到硬盘上,要使用字符流中的输出流Writer

FileWriter:用来写入字符文件的便捷类


//创建一个可以往文件中写入字符数据的字符输出流对象

FileWriter fw = new FileWriter("文件所在位置");   //若文件不存在,则会自动创建;若文件存在则会被覆盖。


//调用Writer对象中的write(string)方法,写入数据,其实是将数据写入到临时存储缓冲区中

fw.write("abcde");


//进行刷新,将数据直接写入到目的地中

fw.flush();


//关闭流,关闭资源。在关闭前会先调用flush刷新缓冲区中的数据到目的地

fw.close();


字符流细节-换行和续写

换行:fw.write("abcde"+LIKE_SEPARATOR+"hhhh");

如果构造函数中加入true,可以实现对文件进行续写:

FileWriter fw = new FileWriter("文件所在位置",true);

fw.write("mmmmm");

fw.write("abcde"+LIKE_SEPARATOR+"hhhh");

运行结果则是:

mmmmmabcde

hhhh

字符流-FileReader-读取方式一

读取一个文本文件,将读取到的字符打印到控制台

需求:读取一个文本文件,将读取到的字符打印到控制台  

        

   public static void main (String[] args) throws IOException{  

          //创建读取字符数据的流对象

 //在创建读取流对象时,必须要明确被读取的文件,一定确定该文件是存在的

        //用一个读取流关联一个已经存在的文件

         FileReader fr = new FileReader("已经存在的文件名");

         //用Reader中的read方法读取字符

          int ch = fr.read();

          System.out.println(ch);


          fr.close();

}

字符流-FileReader-读取方式二

 public static void main (String[] args) throws IOException{  


            //创建读取字符数据的流对象

         FileReader fr = new FileReader("已经存在的文件名");

         //使用read(char[])读取文本文件数据;先创建数据

          char[] buf = new char[3];

          int num = fr.read(buf);//将读取到的字符存储到数组中

          System.out.println(num+":"+new String(buf));


          fr.close();

}

字符流-缓冲区

缓冲区的出新提高了对数据的读写效率

对应类:

        BufferedWriter

        BufferedReader

缓冲区要结合流才能被使用

在流的基础上对流的功能进行了增强

字符流缓冲区-BufferedWriter

Java-IO流-字节流字符流_第1张图片

字符流缓冲区-BufferedReader

package cn.itcast;


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;


public class BufferedReaderDemo {
private static final String FileNotFoundException = null;
private static final String IOException = null;


public static void main(String[] args) throws IOException{
FileReader fr = new FileReader("");
BufferedReader bufr = new BufferedReader(fr);
                String line = null;
               while((line=bufr.readLine())!=null){
             System.out.print("line");
         }

bufr.close();
public static void demo() throws FileNotFoundException, IOException{
FileReader fr1 = new FileReader("");

char[] buf = new char[1024];

int len=0;
while ((len=fr1.read(buf))!=1){
System.out.println(new String(buf,0,len));
}

fr1.close();
}
}

}

缓冲的原理:其实就是从源中获取一批数据装进缓冲区中,再从缓冲区中不断的取出一个一个数据,在此次取完后,再从源中继续取一批数据进入缓冲区,当源中的数据取光是,用-1作为结束标记。

字节流

基本操作与字符流类相同

但它不仅可以操作字符,还可以操作其它媒体文件

字节流操作文本演示:

Java-IO流-字节流字符流_第2张图片Java-IO流-字节流字符流_第3张图片




你可能感兴趣的:(javase基础)