文件内容的读写

        文件内容的读写分为读写字符与读写字节,他们使用的是不同的类与方法.

字节流

        InputStream

        InputStream是读取抽象类,对文件进行写入需要使用FIleInputStream.FIleInputStream中的部分方法如下:

修饰符及返回值类型方法名说明
FileInputStream(FIle  file)利用file构造文件输入流
FileInputStream(String name)利用文件路径构造输入流
intread()读取一个字节,返回-1表示文件已读完.
intread(byte[] b)最多读取b.length字节的数据到b中,返回实际读到的数量,-1代表
文件已读完.
 
intread(byte[] b,int off,int len)最多读取len字节的数据到b中,从b[off]开始填充数据,返回实际独到的数量,-1代表文件已读完.
voidclose()关闭字节流

        在使用构造方法时,未找到文件则抛出FileNotFoundException异常,如果找到了文件则打开文件.在使用完毕FIleInputStream后需要调用close来关闭文件,也可以将构造方法放入try(){}中,让代码块执行完毕后自动关闭文件.

        InputStream inputStream = new FileInputStream("./Test.txt");
        inputStream.close();
        try(InputStream inputStream = new FileInputStream("./Test.txt");){

        }

read的使用(Test文件中的内容为"Hello"):

        try(InputStream inputStream = new FileInputStream("./Test.txt");){
            while (true) {
                int b = inputStream.read();
                if (b == -1) {
                    break;
                }
                System.out.printf("%c", (char) b);
            }
        }

        try(InputStream inputStream = new FileInputStream("./Test.txt");) {
            while (true) {
                byte[] b = new byte[1024];
                int n = inputStream.read(b);
                if (n == -1) {
                    break;
                }
                System.out.print(new String(b, 0, n));
            }
        } 

        try(InputStream inputStream = new FileInputStream("./Test.txt");) {
            while (true) {
                byte[] b = new byte[10];
                int n = inputStream.read(b,3,2);
                if (n == -1) {
                    break;
                }
                System.out.println(new String(b,3,n));
            }
        }

        利用Scanner进行字符的读取

        在此处Scanner的构造方法中不再传入System.in,而是使用FileInputStream对象来构造Scanner对象,这样就可以通过scanner来访问文件.

    public static void main(String[] args) throws FileNotFoundException {
        try(InputStream inputStream = new FileInputStream("./Test.txt");
            Scanner scanner = new Scanner(inputStream)) {
            while(scanner.hasNext()){
                System.out.print(scanner.next());
            }
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
    }

        OutputStream

        与InputStream相对应OutputStream在操作文件时也需要使用FileOutputStream.FileOutPutStream的部分方法如下:

修饰符及返回值类型方法名说明
FileoutputStream(String name)利用文件路径构造输出流,默认清空打开文件的内容
FileoutputStream(String name,boolean append)利用文件路径构造输出流,append传入true不清空打开文件的内容,传入false清空文件内容.
FileoutputStream(File file)利用file对象构造输出流,默认清空打开文件的内容
FileoutputStream(File file,boolean append)利用file对象构造输出流,append传入true不清空打开文件的内容,传入false清空文件内容.
voidwrite(int b)写入单个字节数据
voidwrite(byte[] b)将b数组中的内容写入文件
voidwrite(byte[] b,int off,int len)将b这个数组中从off开始写入len个字符到文件中.
voidclose()关闭字节流
voidflush()刷新缓冲区

        write的使用:

        try(OutputStream outputStream = new FileOutputStream("./Test.txt",true);){
            outputStream.write('A');
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        try(OutputStream outputStream = new FileOutputStream("./Test.txt",true);){
            byte[] flush = {'N','i','H','a','o'};
            outputStream.write(flush);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        try(OutputStream outputStream = new FileOutputStream("./Test.txt",true);){
            byte[] flush = {'N','i','H','a','o'};
            outputStream.write(flush,2,3);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

字符流

        与字节流相对应,字符流每次读取都是以字符为单位进行的.

        Reader

        Reader是字符流的读取抽象类,在操作文件时需要实例化File Reader对象.

修饰符及返回值类型方法名说明
FileReader(FIle  file)利用file构造文件输入流
FileInputStream(String name)利用文件路径构造输入流
intread()读取一个字节,返回-1表示文件已读完.
intread(char[] b)最多读取b.length字符的数据到b中,返回实际读到的数量,-1代表
文件已读完.
 
intread(char[] b,int off,int len)最多读取len字符的数据到b中,从b[off]开始填充数据,返回实际独到的数量,-1代表文件已读完.
voidclose()关闭字节流

        此处的read方法的使用与InputStream相似,但是读取是以字符为单位进行.

        try (Reader reader = new FileReader("./Test.txt")) {
            while(true){
                int n = reader.read();
                if(n == -1){
                    break;
                }
                System.out.print((char)n);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        Writer

        Writer是字符流的读取抽象类,在操作文件时需要实例化FileWriter对象.

修饰符及返回值类型方法名说明
Writer(String name)利用文件路径构造输出流,默认清空打开文件的内容
Writer(String name,boolean append)利用文件路径构造输出流,append传入true不清空打开文件的内容,传入false清空文件内容.
Writer(File file)利用file对象构造输出流,默认清空打开文件的内容
Writer(File file,boolean append)利用file对象构造输出流,append传入true不清空打开文件的内容,传入false清空文件内容.
voidwrite(int b)写入单个字节数据
voidwrite(byte[] b)将b数组中的内容写入文件
voidwrite(byte[] b,int off,int len)将b这个数组中从off开始写入len个字符到文件中.
voidclose()关闭字节流
voidflush()刷新缓冲区

        此处writer的使用与OutpuStream类似,以字符为单位.

        try (Writer writer = new FileWriter("./Test.txt",true)) {
            char[] flush = {'J','a','v','a'};
            writer.write(flush);
        }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值