美文网首页
JAVA-IO流

JAVA-IO流

作者: info_gu | 来源:发表于2020-06-29 14:05 被阅读0次
package com.lingyejun.io;

import java.io.*;

/**
 * Created by Lingye on 2018/9/27 20:15
 */
public class FileStreamOperate {

public static final String READ_UTF8_FILE_PATH = "D:\\input-utf8.txt";
public static final String READ_UNICODE_FILE_PATH = "D:\\input-unicode.txt";
public static final String WRITE_BYTES_FILE_PATH = "D:\\output-bytes.txt";
public static final String WRITE_CHARS_FILE_PATH = "D:\\output-char.txt";


/**
 * 按照字节流的方式读取文件内容
 *
 * Step 1.根据文件路径,构建文件对象
 * Step 2.创建输入流用来读取文件内容
 * Step 3.创建字节数组来存放读取内容
 * Step 4.关闭读取文件的输入流
 *
 * @return
 */
public void readFileByFileInputStream() {
    System.out.println("=== readFileByFileInputStream Start ===");
    // 构建文件对象
    File inputFile = new File(READ_UTF8_FILE_PATH);
    // 初始化输入流
    InputStream inputStream = null;
    try {
        // 创建字节输入流
        inputStream = new FileInputStream(inputFile);
        // 读取到1KB字节数组中
        byte[] buffer = new byte[100];
        // 每次读取的字节数
        int readLength;
        // 读取数据并放到buffer数组中
        while ((readLength = inputStream.read(buffer)) != -1) {
            // UTF-8为变长编码,一个汉字占3个字节
            System.out.println("本次读取" + readLength + "个字节数据内容为:" + new String(buffer));
        }
    } catch (FileNotFoundException e) {
        // 文件未找到时异常处理
        e.printStackTrace();
    } catch (IOException e) {
        // 读取过程中,删除文件会出此异常
        e.printStackTrace();
    } finally {
        if (inputStream != null) {
            try {
                // 关闭流过程,也有可能出现异常
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("=== readFileByFileInputStream End ===");
}

/**
 * 按照字符流的方式读取文件内容
 *
 * Step 1.根据文件路径,构建文件对象
 * Step 2.创建字符输入流读取文件内容
 * Step 3.创建字符数组来存放读取内容
 * Step 4.关闭读取文件的字符输入流
 *
 * @return
 */
public void readFileByFileReader(){
    System.out.println("=== readFileByFileReader Start ===");
    // 根据路径拿到文件对象
    File file = new File(READ_UTF8_FILE_PATH);
    // 初始化字符输入流
    Reader fileReader = null;
    // 初始化存放读取内容的字符数组
    char[] charArray = new char[100];
    // 初始化一个字符
    char once;
    try {
        fileReader = new FileReader(file);
        // 一次读取一个数组长度的字符串
        fileReader.read(charArray);
        System.out.println(charArray);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fileReader != null) {
            try {
                // 关闭流过程,也有可能出现异常
                fileReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("=== readFileByFileReader End ===");
}

/**
 * 通过字节流的方式写入信息到文件
 *
 * Step 1.根据文件路径,构建文件对象
 * Step 2.创建字节输出流写出信息到文件
 * Step 3.构造待写出的内容,并转为字节数组
 * Step 4.关闭读取文件的字符输出流
 */
public void writeFileByFileOutputStream() {
    System.out.println("=== writeFileByFileOutputStream Start ===");
    // 创建写出文件
    File file = new File(WRITE_BYTES_FILE_PATH);
    // 初始化字节输出流
    OutputStream outputStream = null;
    // 写出内容
    String outInfo = "写出测试";
    // 转成字节数组
    byte[] byteArray = outInfo.getBytes();
    try {
        // 创建输出字节流
        outputStream = new FileOutputStream(file);
        outputStream.write(byteArray);
        System.out.println("按照字节流成功写出内容:"+outInfo);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (outputStream != null) {
            try {
                // 关闭写出流时,注意抓异常
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("=== writeFileByFileOutputStream End ===");
}

/**
 * 通过字符流的方式写入信息到文件
 *
 * Step 1.根据文件路径,构建文件对象
 * Step 2.创建字符输出流写出信息到文件
 * Step 3.构造待写出的内容,并转为字符数组
 * Step 4.关闭读取文件的字符输出流
 */
public void writeFileByFileWriter(){
    System.out.println("=== writeFileByFileWriter Start ===");
    // 创建写出文件
    File file = new File(WRITE_CHARS_FILE_PATH);
    // 初始化字符输出流
    Writer fileWriter = null;
    String strInfo = "字符写出数据";
    try {
        // 创建输出字符流
        fileWriter = new FileWriter(file);
        // 写出内容
        fileWriter.write(strInfo);
        System.out.println("按照字符流成功写出内容:"+strInfo);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if(fileWriter != null){
            try {
                // 关闭写出流时,注意抓异常
                fileWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("=== writeFileByFileWriter End ===");
}

/**
 * 任意读取文件内容
 */
public void randomAccessFile(){
    System.out.println("=== randomAccessFile Start ===");
    File file = new File(READ_UTF8_FILE_PATH);
    try {
        RandomAccessFile randomAccessFile = new RandomAccessFile(file,"r");
        // 获取文件当前的指针位置
        System.out.println("file now pointer is "+randomAccessFile.getFilePointer());
        // 将文件指针设置到指定位置(绝对位置)
        randomAccessFile.seek(3);
        // 相对位置,相对于当前的位置,
        randomAccessFile.skipBytes(3);
        System.out.println("file now pointer is "+randomAccessFile.getFilePointer());
        // 字节数组
        byte[] buffer = new byte[17];
        // off是指的写到buffer的数组的起始位置
        randomAccessFile.read(buffer,0,buffer.length);
        System.out.println(new String(buffer));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("=== randomAccessFile End ===");
}

/**
 * 通过字节流的方式将文件内容拷贝到另一个文件中
 *
 * Step 1.根据文件路径,构建源文件对象
 * Step 2.根据文件路径,构造目的文件对象
 * Step 3.创建字节输入流从源文件中读取信息
 * Step 4.将读入到内存的信息再写出到目的文件中
 * Step 5.拷贝完成后关闭输入输出流
 */
public void copyFile() {
    System.out.println("=== copyFile Start ===");
    // 输入文件对象
    File inFile = new File(READ_UTF8_FILE_PATH);
    // 输出文件对象
    File outFile = new File(WRITE_BYTES_FILE_PATH);
    // 初始化输入流
    InputStream inputStream = null;
    // 初始化输出流
    OutputStream outputStream = null;
    try {
        // 将输入流怼到输入文件,使程序内存与磁盘建立联系
        inputStream = new FileInputStream(inFile);
        // 将输出流怼到输出文件,使程序内存与磁盘建立联系
        outputStream = new FileOutputStream(outFile);
        while (true) {
            // 读取信息到内存
            int temp = inputStream.read();
            // 拷贝完成
            if (temp == -1) {
                break;
            }
            // 将内容拷贝到输出文件中
            outputStream.write(temp);
        }
        System.out.println("拷贝文件成功完成");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (inputStream != null) {
            try {
                // 关闭输入流异常后,也要保证输出流关闭
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (outputStream != null) {
                    try {
                        outputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    System.out.println("=== copyFile End ===");
}

public static void main(String[] args) {
    FileStreamOperate fileStreamOperate = new FileStreamOperate();
    // 按照字节流读取的话,一个汉字两个字节
    fileStreamOperate.readFileByFileInputStream();
    // 按照字符读取,java Unicode编码一个字符(不论字母还是汉字)两个字节
    fileStreamOperate.readFileByFileReader();
    // 采用任意读取的方式读取文件信息
    fileStreamOperate.randomAccessFile();
    // 按照字节流的方式写信息到文件
    fileStreamOperate.writeFileByFileOutputStream();
    // 按照字符流的方式写信息到文件
    fileStreamOperate.writeFileByFileWriter();
    // 拷贝文件
    fileStreamOperate.copyFile();
}

}

相关文章

  • Java-IO流

    File类 File类是操作文件和文件目录的类,能新建、删除、重命名、文件和目录 但File类不能访问文件本身的内...

  • JAVA-IO流

    }

  • java-IO流

    1、OutputStream 1.1 OutputStream 主要针对二进制流的操作 1.2 PipedOutp...

  • Java-IO流-Properties

    引出Properties 将一个媒体文件切割成多个碎片 配置文件的建立和读取 Properties,它里面存储的键...

  • Java-IO流-RandomAccessFile

  • Java-IO流(一)

    了解输入输出技术 IO技术中的File对象 如何创建文件对象 File获取文件相关信息 File类中方法-文件以及...

  • Java-IO流对象

    File中的静态成员变量 递归的使用 File中的递归

  • JavaSE-IO输入输出-装饰设计模式

    JAVA-IO 早期IO都是对字节流的操作,但是为了方便操作文本后来出现了字符流。ASCII-英文GB1312-中...

  • Java-IO流(五)-字符流(OutputStreamWrit

    概述 OutputStreamWriter-指定编码写中文、InputStreamReader-指定编码读中文 O...

  • Java-IO流的理解

    在Java中,把不同的输入/输出源(硬盘、文件和网络连接等)抽象的表述为流(Stream),通过流的方式允...

网友评论

      本文标题:JAVA-IO流

      本文链接:https://www.haomeiwen.com/subject/obpofktx.html