IO流

Posted 开拖拉机的蜡笔小新

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO流相关的知识,希望对你有一定的参考价值。

IO流:
IO流用来处理设备之间的数据传输,Java对于流的操作对象都在IO包中
将外设中的数据读取到内存中:输入
将内存的数写入到外设中:输出


流分为字节流和字符流
字符流的由来:
其实就是字节流读取文字字节数据后,不直接操作而是先查指定的编码表。
获取相应的文字。在对这个文字进行操作,简单地说就是:字节流+编码表

字节流的顶层父类:
1.InputStream 2.OutputStream

字符流的两个顶层父类:
1.Reader 2.Writer
这些体系的子类都以父类名作为后缀
而子类名的前缀就是该对象的功能

一、File对象

下面几种方式都可以:

private static void construtorDemo() {
        //将一个已经存在的,或者不存在的文件或者目录封装成file对象
    File f1=new File("c:\\a.txt");
    
    File f2=new File("c:\\","a.txt");
    
    File f=new File("c:\\a.txt");
    File f3=new File(f,"a.txt");
    
    File f4=new File("c:"+File.separator+"a.txt");
    }

二、FileWriter

FileWriter fw=new FileWriter("demo.txt",true);   //如果构造函数加入true,可以实现对文件的续写

private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    public static void main(String[] args) throws IOException {
        //创建一个可以往文件中写入字符数据的输出流对象
        /*
         * 既然是往一个文件中写入文件数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地)
         * 如果文件不存在,则会自动创建
         * 如果文件存在,则会被覆盖
         * 如果构造函数加入true,可以实现对文件的续写
         */
        FileWriter fw=new FileWriter("demo.txt",true);
        
        /*
         * 调用Writer对象中的writer(string)
         * 其实数据存储到了临时缓冲区中。
         */
        fw.write("aga"+LINE_SEPARATOR+"ngag");
        
        /*
         * 进行刷新,将数据直接写到目的地
         */
        //fw.flush();
        /*
         * 关闭流,关闭资源,在关闭前,会调用flush
         */
        fw.close();
        
        
    }

三、FileReader

FileReader fr=new FileReader("demo.txt");

ch=fr.read();  //一次读取一个字符,返回asc码数字

len=fr.read(buf) //一次读取一个数组长度的字符,返回读取长度

public class FileReaderDemo {

    public static void main(String[] args) throws IOException {
/*
 * 1.创建读取字符数据的流对象
 * 在创建读取流对象时,必须要明确被读取的文件。一定要确定该文件是存在的。
 * 用一个读取流关联一个已存在文件
 */
        FileReader fr=new FileReader("demo.txt");
        int ch=fr.read();
        System.out.println(ch);        
        int ch1=0;
        while((ch1=fr.read())!=-1){
            System.out.println(((char)ch1));
        }
        
        /*
         * 使用read(char[])读取文本文件数据。
         * 先创建字符数组。效率更高。
         */        
        char[] buf= new char[1024];
        int len=0;
        while((len=fr.read(buf))!=-1){
            System.out.println(new String(buf,0,len));
        }            
        
        fr.close();
    }

}

 

作业:将c盘的一个文本文件复制到d盘

分析:
读取c盘中的文件数据
将这些数据写入到d盘中
连读带写。
思路:
1.需要读取源
2.将读到的源数据写到目的地
3.既然是操作文本数据,使用字符流

public class CopyTextTest {

    public static void main(String[] args) throws IOException  {
        //1.读取一个已有的文本文件,使用字符去流和文件相关联
        FileReader fr=new FileReader("demo.txt");
        //2.创建一个目的,用于存储读到数据
        FileWriter fw=new FileWriter("D://copytext_1.txt");
        //3.频繁的读写操作
        int ch=0;
        while((ch=fr.read())!=-1){
            fw.write(ch);
        }
        //4.关闭资源
        fw.close();
        fr.close();        
        
    }

}

 

以上是关于IO流的主要内容,如果未能解决你的问题,请参考以下文章

在 .net 中处理 pcm wav 流

此应用小部件片段中所有意图 (PendingIntents) 的逻辑流

JavaSE 一些技巧 04——IO流各种流常用代码整理

猜数小游戏升级版(IO流实现,对IO流进行加强理解运用)

利用IO(文件字符流)打印代码本身

JAVA IO流相关代码(Serializable接口,管道流PipedInputStream类,RandomAccessFile类相关代码)