11、字符流、字节流

来源:互联网 发布:图文排版软件 编辑:程序博客网 时间:2024/06/06 11:41

流操作基本规律
1、明确源和目的
源:输入流。InputStream  Reader
目的:输出流。 OutputStream Writer
2、操作的数据是否是纯文本。
是:字符流
不是:字节流
3、当体系明确后,在明确要使用哪个具体的对象
通过设备来进行区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
转换流什么使用。字符和字节之间的桥梁,通常,涉及到字符编码转换时,需要用到转换流


字符流:

字符流只用来操作文字数据

字符流两个基类:
Reader   
FileReader  录入
BufferedReader

Writer
FileWriter 读取
bufferedWriter

close和flush的区别:flush刷新后,流可以继续使用,close刷新后,关闭流


FileWriter

package BytePakage;import java.io.*;public class FileWriterDemo {     //需求:在硬盘上创建一个文件,并写入文字数据    public static void main(String[] args) throws IOException    {        //创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。        //而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。        FileWriter file = new FileWriter("demo.text");         //调用write方法,将字符串写入流中        file.write("胡平燕");         //刷新流对象中的缓冲数据,将数据刷新到目的中        file.flush();         //关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,        //将数据刷新到目的地中        //和flush的区别:flush刷新后,流可以继续使用,close刷新后,关闭流        file.close();    } }

BufferedWriter
在创建缓冲区之前,必须先有对象流
该缓冲区提供了一个跨平台的换行符  newLine()方法

package BytePakage; import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException; public class BufferedWriterDemo {     public static void main(String[] args)throws IOException    {        FileWriter file = new FileWriter("E://text.txt");         //将对象流作为参数传递给缓冲区的构造函数即可        BufferedWriter bur = new BufferedWriter(file);         for(int i=1; i<5;i++)        {            bur.write("胡平燕"+i);            bur.newLine();//换行            bur.flush();//刷新流        }        //关闭缓冲区,就是在关闭缓冲区的对象流        bur.close();    }}
BufferedReader
package BytePakage; import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException; public class BufferedReaderDemo {     public static void main(String[] args)throws IOException    {        FileReader fr = new FileReader("E://text.txt");             BufferedReader buf = new BufferedReader(fr);        String line = null;        while((line = buf.readLine()) != null)        {            System.out.println(line);        }               buf.close();            }}

FileReader

package BytePakage; import java.io.FileReader;import java.io.FileWriter;import java.io.IOException; public class CopyText {     public static void main(String[] args) throws IOException    {        FileWriter file = null;        FileReader fr3 = null;        try        {            //创建目的地            file = new FileWriter("E://demo.java");                     //与已有文件关联            fr3 = new FileReader("F://demo.txt");                       char[] ch2 = new char[1024];            int len = 0;            while((len = fr3.read(ch2))!=-1)            {                //将F盘文本文件Copy到E盘                file.write(ch2,0,len);            }        }         catch (IOException e)         {            throw new RuntimeException("读取失败");        }        finally        {            try            {                if(file != null)                    file.close();                if(fr3 != null)                    fr3.close();            }             catch (IOException e)            {                throw new RuntimeException("读取失败");            }        }     }}

写入转换流

package BytePakage; import java.io.BufferedWriter;import java.io.OutputStream;import java.io.OutputStreamWriter; public class TransStreamDemo2 {     public static void main(String[] args)    {        //键盘录入最常见写法        BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));        String len = null;        while((len = bufw.readLine()) != null)        {            if("over".equals(bufw))                break;            bufw.write(len.toUpperCase());            bufw.newLine();            bufw.flush();        }           bufw.close();    }}
读取转换流
<span style="font-size:12px;color:#000000;">package BytePakage; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader; public class TransStreamDemo {     public static void main(String[] args) throws IOException    {        //获取键盘录入对象。        //InputStream in = System.in;        //将字节流对象转成字符流对象,使用转换流。InputStreamReader        //InputStreamReader irs = new InputStreamReader(in);        //为了提高效率,将字符流进行缓冲区技术高效作用,使用BufferedReader        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));        String len = null;        while((len = buf.readLine()) != null)        {            if("over".equals(len))                break;            System.out.println(len.toUpperCase());        }    }}</span>


字节流:

InputStream
FileInputStream 录入
BufferedInputStream

OutputStream
FileOutputStream 读取
BufferedOutputStream


复制文件案例

package BytePakage; import java.io.*; public class CopyPic {     public static void main(String[] args) throws Exception    {        FileInputStream fileI = null;        FileOutputStream fileO = null;        try        {            //获取硬盘文件            fileI = new FileInputStream("E://ed.JPEG");            //复制文件的对象            fileO = new FileOutputStream("E://ed2.JPEG");            byte[] buf = new byte[1024];            int len = 0;            while((len = fileI.read(buf)) != -1)            {                fileO.write(buf,0,len);            }        }         catch (Exception e)         {            throw new RuntimeException("复制文件失败");        }        finally        {            try            {                if(fileI != null)                    fileI.close();            }             catch (Exception e2)            {                throw new RuntimeException("读取文件失败");            }            try            {                if(fileO != null)                    fileO.close();            }             catch (Exception e2)            {                throw new RuntimeException("写入文件失败");            }        }    } } 

复制MP3

package BytePakage; import java.io.*; public class CopyMp3 {     public static void main(String[] args) throws IOException    {           long start = System.currentTimeMillis();        copy();        long end = System.currentTimeMillis();        System.out.println((end-start)+"毫秒");    }    public static void copy()throws IOException    {        BufferedInputStream bufInput = new BufferedInputStream(new FileInputStream("E://music1.mp3"));        BufferedOutputStream bufOutput = new BufferedOutputStream(new FileOutputStream("E://music2.mp3"));         int len = 0;        while((len = bufInput.read()) != -1)        {            bufOutput.write(len);        }        bufInput.close();        bufOutput.close();    }}


0 0