java之IO

? 版权声明:本文为博主原创文章,转载请注明出处

1.RandomAccessFile:访问保存数据记录的文件的

  1.1 创建对象时必须指定对文件的操作方式。r:只读 rw:读写

  1.2 该对象读取文件时存在一个指针,指向当前位置;因此程序可以跳到任何地方读写数据

  1.3 raf.getFilePointer():定位,获取指针当前所在位置

  1.3 raf.seek(pos):跳转,将指针移动到文件中的指定位置

2.字节流

  2.1 InputStream:抽象类,不能直接生成对象,它是所有字节输入流的父类。输入流主要用于读操作。is.read()

  2.2 OutputStream:抽象类,不能直接生成对象,它是所有字节输出流的父类。输出流主要用于写操作。os.writer()

  2.3 FileInputStream:用于读取本地文件中的字节数据

  2.4 FileOutputStream:用于将字节数据写入到文件中

/**
     * 通过字节数组拷贝文件
     *
     * @param srcFile
     *                  源文件
     * @param destFile
     *                  目标文件
     * @throws IOException
     */
    public static void copyFileByByteArray(String srcFile, String destFile) throws IOException {

        long startTime = System.currentTimeMillis();// 开始时间

        // 将文件以字节流的形式进行读/写操作
        FileInputStream fis = new FileInputStream(srcFile);
        FileOutputStream fos = new FileOutputStream(destFile);

        byte[] buff = new byte[1024];// 存放一次读取的字节数据
        int b;// 一次性读取的字节个数

        // 批量读取数据
        while ((b = fis.read(buff, 0, buff.length)) != -1) {
            fos.write(buff, 0, b);// 批量写入数据
        }

        // 关闭文件输入/输出流
        fis.close();
        fos.close();

        long endTime = System.currentTimeMillis();// 结束时间
        System.out.println("copFileByByteArray执行时间为:" + (endTime - startTime) + "ms");

    }

  2.5 BufferedInputStream:带缓存区的输入流,默认缓存区大小是8M,可减少访问磁盘的次数,提高文件读取性能

  2.6 BufferedOutputStream:带缓存区的输出流,可以提高文件写入效率

/**
     * 通过字节数组缓存拷贝文件
     *
     * @param srcFile
     *                  源文件
     * @param destFile
     *                  目标文件
     * @throws IOException
     */
    public static void copyFileByByteArrayBuffer(String srcFile, String destFile) throws IOException {

        long startTime = System.currentTimeMillis();// 开始时间

        // 将文件以带缓存区的字节流的形式进行读/写操作
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

        byte[] buff = new byte[1024];// 定义缓存区
        int b;// 一次读取的字节个数

        // 批量读取字节数据并放入缓存区中
        while ((b = bis.read(buff, 0, buff.length)) != -1) {
            bos.write(buff, 0, b);// 批量将缓存区中的数据写入
            bos.flush();// 刷新缓冲区
        }

        // 关闭带缓存区的输入/输出流
        bos.close();
        bis.close();

        long endTime = System.currentTimeMillis();// 结束时间
        System.out.println("copFileByByteArrayBuffer执行时间为:" + (endTime - startTime) + "ms");

    }

3.字符流

  3.1 InputStreamReader:字节流与字符流之间的桥梁,将字节输入流以指定的编码格式转换为字符输入流

  3.2 OutputStreamWriter:字节流与字符流之间的桥梁,将字节输出流以指定的编码格式转换为字符输出流

/**
     * 通过字符流批量拷贝文件
     *
     * @param srcFile
     *                  源文件
     * @param destFile
     *                  目标文件
     * @throws IOException
     */
    public static void copyFileByIsrAndOsw(String srcFile, String destFile) throws IOException {

        long startTime = System.currentTimeMillis();// 开始时间

        // 创建文件输入流
        FileInputStream fis = new FileInputStream(srcFile);
        // 将字节流以UTF-8的格式转换为字符流
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        // 创建文件输出流
        FileOutputStream fos = new FileOutputStream(destFile);
        // 将字节流以UTF-8的格式转换为字符流
        OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");

        char[] buff = new char[1024];
        int b;// 读取的字符数据
        while ((b = isr.read(buff, 0, buff.length)) != -1) {// 批量读取字符
            osw.write(buff, 0, b);// 输出字符
        }

        // 关闭字符输入流
        isr.close();
        // 关闭字符输出流
        osw.close();
        // 关闭字节输入流
        fis.close();
        // 关闭字节输出流
        fos.close();

        long endTime = System.currentTimeMillis();// 结束时间
        System.out.println("copyFileByByteIsrAndOsw执行时间为:" + (endTime - startTime) + "ms");

    }

  3.4 FileReader:以字符流的形式读取本地文件

  3.5 FileWriter:将字符流的形式将数据写入到文件中

/**
     * 通过字符流批量拷贝文件
     *
     * @param srcFile
     *                  源文件
     * @param destFile
     *                  目标文件
     * @throws IOException
     */
    public static void copyFileByFrAndFw(String srcFile, String destFile) throws IOException {

        long startTime = System.currentTimeMillis();// 开始时间

        FileReader fr = new FileReader(srcFile);
        FileWriter fw = new FileWriter(destFile);

        char[] buff = new char[1024];
        int b;// 读取的字符数据
        while ((b = fr.read(buff, 0, buff.length)) != -1) {// 批量读取字符
            fw.write(buff, 0, b);// 输出字符
        }

        // 关闭字符输入流
        fw.close();
        // 关闭字符输出流
        fr.close();

        long endTime = System.currentTimeMillis();// 结束时间
        System.out.println("copyFileByFrAndFw执行时间为:" + (endTime - startTime) + "ms");

    }

  3.6 BufferedReader:带缓存区的字符输入流

  3.7 BufferedWriter:带缓存区的字符输出流

/**
     * 通过字符流批量拷贝文件
     *
     * @param srcFile
     *                  源文件
     * @param destFile
     *                  目标文件
     * @throws IOException
     */
    public static void copyFileByBrAndBw(String srcFile, String destFile) throws IOException {

        long startTime = System.currentTimeMillis();// 开始时间

        BufferedReader br = new BufferedReader(new InputStreamReader(
                new FileInputStream(srcFile)));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(destFile)));

        String line;// 读取的行数据
        while ((line = br.readLine()) != null) {// 批量读取字符
            bw.write(line);
            bw.newLine();
            bw.flush();
        }

        // 关闭字符输入流
        bw.close();
        // 关闭字符输出流
        br.close();

        long endTime = System.currentTimeMillis();// 结束时间
        System.out.println("copyFileByBrAndBw执行时间为:" + (endTime - startTime) + "ms");

    }

  

参考:http://www.imooc.com/learn/123

时间: 2024-11-07 18:51:14

java之IO的相关文章

Java之IO(八)PipedIutputStream和PipedOutputStream

转载请注明源出处:http://www.cnblogs.com/lighten/p/7056278.html 1.前言 本章介绍Java的IO体系中最后一对字节流--管道流.之前在字节数组流的时候就说过,其可以充当输入输出流的转换作用,Java中还有一个管道流可以完成相似的功能,但是其主要作用是用于不同线程间的通讯,下面就具体讲一下管道流是如何实现的,以及相关例子. 值得注意的是,在JDK源码注释中提到了,通常使用一个管道输出流关联一个管道输入流形成管道会话.通常输入流和输出流是不在一个线程中的

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

java的IO总结(一)

Java的IO流是实现输入输出的基础,这里所说的流就是数据流,大部分的与流相关的类放在Java.io包下. 一,Java的流分类 按照不同的分类方式可以把流分成不同的类型,下面我们从不同的角度对流进行分类. 1,按照流的方向可以分为输入流与输出流       输入流:只能从中读取数据,而不能向其写出数据       输出流:只能向其写出数据,而不能从中读数据.     2,字节流与字符流 字节流主要是以InputStream和OutputStream为基类,其对应子类有FileInputStre

java中IO写文件工具类

下面是一些根据常用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 其中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的非常简练,例如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径文件夹下的所有文件 * @param path * @return */ public static File[] ge

Java操作IO各主要类介绍

DataInputStream和DataOutputStream 往二进制文件中读和写入java基本数据类型 public class BinaryReadWrite { private DataInputStream dis = null; private DataOutputStream dos = null; private String s_FilePath = "config\\bin.dat"; private byte[] buff = "{\"nam

JAVA之IO技术File类的使用

package ioTest.io3; /* * File类是对文件和文件夹的抽象. * File类的常见方法: * 1.创建 * createNewFile():在指定的位置创建文件,如果该文件已经存在,则不创建,返回false. * 和输出流对象不一样,输出流对象,只要已建立就创建,如果文件存在,则覆盖. * mkdir():创建此抽象路径名指定的目录 * mkdir():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录. * 2.删除 * delete() * deleteOnEx

JAVA之IO技术-获取指定目录下的文件夹和文件的File对象或是字符串名称。

package ioTest.io3; /* * 获取指定目录下的文件夹和文件的File对象或是字符串名称. * 也可以通过filter获取指定的文件夹或者指定类型的文件 * 这里面需要做一个总结,如何利用jdk的源码去理解不熟悉的方法的应用. */ import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; public class FileDemo2 { public static void m

Java之IO(十)Reader和Writer

转载请注明源出处:http://www.cnblogs.com/lighten/p/7071733.html 1.前言 之前的章节已经将Java8的io包中的字节流介绍完毕了.本章开始介绍Java的IO中另一个重要的体系,字符流.字节是给计算机看的,字符才是人能够认识的,可想而知字符流的重要性.字符流体系的根源在于抽象父类Reader和Writer.一切都起源于这两个类. 2.Reader Reader实现了Readable和Closeable接口,这两个接口从JDK1.5开始出现.Reader

Java之IO(九)其它字节流

转载请注明源出处:http://www.cnblogs.com/lighten/p/7063161.html 1.前言 之前的章节已经介绍了java的io包中所有成对(输入.输出对应)的字节流,本章介绍剩余的一些字节流,包括:LineNumberInputStream.SequenceInputStream.StringBufferInputStream.在JDK8的版本中,只有中间的SequenceInputStream没有被废弃,其它两个都被指出已废弃了. 2.LineNumberInput

java之io之File类的list()方法过滤目录的使用

java的io的知识中,File类必须掌握.File类是对文件或者文件夹的封装.它本身并不能对所封装的文件进行读写,它封装的只是文件或文件夹的周边知识,比如 大小啦,创建日期啦,路径啦等等. 如果File封装的文件夹,File类的list()方法可以将此文件夹下的所有文件夹和文件已字符串数组的形式返回. list(FilenameFilter)可以对返回的字符串数组进行过滤,取自己想要的字符串. ?打印文件夹下的.java文件 实现1 package com.westward.io; impor