Java IO 随笔(二) 文件访问

Java文件访问

在Java中和文件相关的IO操作主要有 FileInputStreamFileOutputStreamFileReaderFileWriter以及随机文件访问 RandomAccessFile


1.Java IO读取文件

1.1 FileInputStream 文件输入流

FileInputStream 是 InputStream 的子类,所以 FileInputStream 是字节流(stream of bytes)的范畴。

1.1.1 FileInputStream 概述

主要构造函数

  • FileInputStream(File file) : 通过File 对象来创建一个文件输入流
  • FileInputStream(String name) : 通过文件地址创建文件输入流
    这里写图片描述
    方法概览
  • close() 关闭流
  • read() 读取一个字节
  • read(byte[] b) 从这个输入流中读取b.length个字节的数据到一个字节数组中。
  • read(byte[] b, int off, int len) 从该输入流中从off 开始将len个字节的数据读入一个字节数组。
  • skip(long n) 跳过并丢弃输入流中的n个字节的数据。
    这里写图片描述

1.1.2 FileInputStream 使用范例

public class FileInputStreamUse {


    public static void main(String[] args) throws Exception {
        //路径方式读取
        readFileByPath();
        //文件对象方式读取
        readFileByFileObject();
    }

    private static void readFileByPath() {
        String content = null;
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream("E:\\file.txt");
            int size;
            byte[] buffer = new byte[1024];
            while ((size = inputStream.read(buffer)) != -1) {
                content = new String(buffer, 0, size);
                System.out.println(content);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (null != inputStream) {
                    inputStream.close();
                }
            } catch (Exception ex) {
                System.out.println("关闭文件失败");
            }
        }
    }


    private static void readFileByFileObject() {
        File file = new File("E:\\file.txt");
        if (!file.exists()) {
            throw new RuntimeException("文件不存在");
        }

        String content = null;
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(file);
            int size;
            byte[] buffer = new byte[1024];
            while ((size = inputStream.read(buffer)) != -1) {
                content = new String(buffer, 0, size);
                System.out.println(content);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try {
                if (null != inputStream) {
                    inputStream.close();
                }
            } catch (Exception ex) {
                System.out.println("关闭文件失败");
            }
        }
    }


}

1.1.2 FileReader概述

FileInputStream 是以字节的方式读取文件中的内容,和FileInputStream 不同的是 FileReader是字符方式的读取。所以FileReader是字符流的范畴。

关于字节流和字符流后面详细讨论

FileReader 使用范例

public class FileReaderUse {

    public static void main(String[] args) {

        FileReader reader = null;
        try {
            reader = new FileReader("E:\\file.txt");
            char[] chars = new char[1024];
            int size = 0;
            while ((size = reader.read(chars)) != -1) {
                System.out.println(new String(chars, 0, size));
            }
        } catch (Exception ex) {
            try {
                if (null != reader) {
                    reader.close();
                }
            } catch (Exception e) {
                System.out.println("关闭文件失败");
            }
        }

    }
}

1.2 FileOutputStream文件输出流

和 FileInputStream一样 FileOutputStream是字节流的范畴,不同的是 FileOutputStream 是 OutputStream的子类实现。用于以字节流的形式输出一个文件。

主要构造函数
和 FileInputStream 一样 FileOutputStream除了有两个基本的构造函数之外还有一个 FileOutputStream(File file, boolean append) 构造函数,该构造函数的第二个参数 append 意思是是否以追加的方式输出。当这个参数是true的时候,文件在输出的时候会将写入的内容追加到文件的结尾。

以下是FileOutputStream全部的构造函数

这里写图片描述

1.2.1 FileOutputStream使用范例

public class FileOutputStreamUse {

    public static void main(String[] args) {

        //普通模式写文件
        normalFileWrite();
        //追加模式
        appendFileWrite();

    }

    private static void normalFileWrite(){
        File outFile = new File("E:\\out-file.txt");
        byte[] outBytes = new String("这是输出内容").getBytes();
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(outFile);
            outputStream.write(outBytes);
            //刷新到磁盘
            outputStream.flush();
        }catch (Exception ex){
            try {
                if(null != outputStream){
                    outputStream.close();
                }
            }catch (Exception e){
                System.out.println("关闭输出流失败");
            }
        }
    }

    private static void appendFileWrite(){
        File outFile = new File("E:\\out-file.txt");
        byte[] outBytes = new String("这是追加的内容").getBytes();
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(outFile,true);
            outputStream.write(outBytes);
            //刷新到磁盘
            outputStream.flush();
        }catch (Exception ex){
            try {
                if(null != outputStream){
                    outputStream.close();
                }
            }catch (Exception e){
                System.out.println("关闭输出流失败");
            }
        }
    }
}

1.2.2 FileWriter 概述

和FileReader一样FileWriter 也是字符流。所以使用方法上和FileReader是类似的

public class FileWriterUse {


    public static void main(String[] args) {

        FileWriter writer = null;
        File outFile = new File("E:\\out-file.txt");
        try {
            //追加方式写入
            writer = new FileWriter(outFile, true);
            writer.write("\n");
            writer.write("这个是通过writer追加的内容");
            writer.flush();
        } catch (Exception ex) {
            try {
                if (null != writer) {
                    writer.close();
                }
            } catch (Exception e) {
                System.out.println("关闭文件失败");
            }
        }
    }


}

完:)

猜你喜欢

转载自blog.csdn.net/qq_38692223/article/details/80325408
今日推荐