20210816学习

IO流

File

字节流: 针对二级制文件
Inputstream
FileInputStream
BufferedInputStream
ObjectInputStream

OutputStream
FileOutputStream
BufferedOutputStream
ObjectOutputStream

字符流: 针对文本文件
Reader
FileReader
BufferedReader
InputStreamReader
Writer
FileWriter
BufferedWriter
OutputStreamWriter
PrintWriter

package cn.tedu.file;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

/**
 * @author ZHU
 * @create 16/08/2021 09:37
 */
public class TestFile {
    public static void main(String[] args) throws IOException {
        //1.创建file独享
        /**
         *1. 构造函数的参数类型是String,代表的是要操作的路径pathname
         * 这个路径既可以是文件路径,也可以是文件夹路径,还可以是不存在的路径
         *
         */

        /**
        2. \ 在代码中有特殊的意义,表示转义符号,
         所以想要表示路径中的\ , 需要写两个才能表示这是一个单纯的 \

         */

        /**
         * 3. 注意: 需要自己手动在D:\ready目录下创建1.txt,并添加内容
         */

        /**
         * 4.创建1.txt时需要设置系统显式文件的后缀名
         * 如果没有设置显示后缀名,文件名应该是1
         */

        //创建file对象时,需要导包

        File file = new File("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt");

        //2.测试常用方法
        //2.1 文件与文件夹属性
        System.out.println(file.length());
        System.out.println(file.exists());
        System.out.println(file.isFile());
        System.out.println(file.isDirectory());
        System.out.println(file.getName());
        System.out.println(file.getParent());
        System.out.println(file.getAbsoluteFile());

        file = new File("C:\\Users\\seniorzhu\\Documents\\TestFile\\zhu");
        /**
         * 如果指定创建文件的路径不存在,会报错:  java.io.IOException
         * 系统找不到指定的路径,就会发生异常,所以调用时需要抛出异常
         */

        //在操作系统中帮我们创建一个原本不存在的文件
        System.out.println(file.createNewFile());
        file = new File("C:\\Users\\seniorzhu\\Documents\\TestFile\\2.txt");
        System.out.println(file.mkdir());

        file = new File("C:\\Users\\seniorzhu\\Documents\\TestFile\\aa\\bb\\cc");
        System.out.println(file.mkdirs());
        /**
         * delete() 只能用来删除文件或者空文件夹
         */
        System.out.println(file.delete());

        //2.3文件列表测试
        file =new File("C:\\Users\\seniorzhu\\Documents\\TestFile");
        String[] list = file.list(); //Alt + Enter 引入局部变量接返回值
        System.out.println(Arrays.toString(list));

        File[] fs = file.listFiles();
        System.out.println(Arrays.toString(fs));
        System.out.println(fs[0]);
        System.out.println(fs[0].length());
    }
}

package cn.tedu.file;

import java.io.*;

/**
 * 本类用于测试字符输入流
 * @author ZHU
 * @create 16/08/2021 11:18
 */
public class TestIn {
    public static void main(String[] args) {
      //  method1();//普通字节流读取
        method2();//高效字节流读取 /缓冲字节输入流

    }

    private static void method2() {
        //1.创建流对象
       /* try {
            new BufferedInputStream(new FileInputStream(new File("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt")));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }*/
        InputStream in = null;
        try {
      in  =    new BufferedInputStream(new FileInputStream("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt"));
            //2.使用流对象
    int b;
    while((b = in.read()) != -1){
        System.out.println(b);
    }
            //3.关流




        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }

    private static void method1() {
        InputStream in = null;

        try {
            //1.创建字节输入流对象用来读取
       /* InputStream in = new InputStream() {
            @Override
            public int read() throws IOException {
                return 0;
            }
        }*/
            //报错,因为抽象父类不可实例化
           //不常用 InputStream in = new FileInputStream(new File("C:\\Users\\seniorzhu\\Documents\\TestFile"));
         in = new FileInputStream("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt");
            //2.使用字节输入流对象
            /**
             * read()  每次调用都会读取一个数据字节,如果读到了数据的末尾,则返回-1
             */
//            System.out.println(in.read());
//            System.out.println(in.read());
//            System.out.println(in.read());
//            System.out.println(in.read());
//            System.out.println(in.read());
//            需求: 需要循环中的所有内容,直至结束
            int b;
            while( (b = in.read() )!= -1){
                System.out.println(b);

            }
            //不可以 会跳着读
          /*  while(in.read() != -1){
                System.out.println(in.read());
            }*/
      //  in.close();//关闭流资源
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            /**
             * try-catch 结构中的第三个部分  : finally{}
             * 这个部分指的是无论是否捕获到异常,是一定会被执行到的代码块
             * 所以常常用来关流操作
             */

            //3.关闭流资源
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


package cn.tedu.file;

import java.io.*;

/**
 * 本类用于练习字符输入流
 * @author ZHU
 * @create 16/08/2021 14:30
 */
public class TestIn2 {
    public static void main(String[] args) {
   //     method1();  //本类用于普通字符流的读取
        method2(); //本类用于普通字符流的读取
    }

    private static void method2() {
        Reader in = null;
        try{
        //1.创建高效流对象
            in = new BufferedReader(new FileReader(""));
            in = new BufferedReader(new FileReader(new File("")));


            //2.使用流对象

            int b;
            while((b = in.read()) != -1){
                System.out.println(b);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void method1() {
        //1.创建流对象
       /* Reader in2 = new Reader() {
            @Override
            public int read(char[] cbuf, int off, int len) throws IOException {
                return 0;
            }

            @Override
            public void close() throws IOException {

            }*/
        Reader in = null;
        try {
            in = new FileReader(new File(""));

            //2.使用流对象
            int  b = 0;

            while(true){
                try {
                    if (!((b = in.read()) != -1)) break;
                } catch (IOException e) {
                    e.printStackTrace();
                }
                System.out.println(b);
            }



        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //3.关闭流对象
}


package cn.tedu.file;

import java.io.*;

/**
 * 本类用于练习自己输出流
 * @author ZHU
 * @create 16/08/2021 16:26
 */
public class TestOut {
    public static void main(String[] args) {
    //    method1();//用于完成普通字节输出流
       method2();//用于完成高效字节输出流
    }

    private static void method2() {
        //1.创建一个在本方法中都生效的局部变量,手动初始化为null
        //2.由于IO操作可能会抛出异常,所以需要try-catch-finally结构
        OutputStream out = null;
        try{
            //3.创建高效流对象
            out = new BufferedOutputStream(new FileOutputStream(new File("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt"),true));
            //4.通过高效流对象将数据输出到文件中
            out.write(98);
            out.write(98);
            out.write(98);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void method1() {
        //1.创建一个在本方法中都生效的局部变量,手动初始化,值为null
        OutputStream out = null;
        //2.创建try-catch -finally结构,因为IO操作可能会抛出异常
        try{
            //3.创建流对象
            //out = new FileOutputStream(new File("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt"));
           // out = new FileOutputStream("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt");
            out = new FileOutputStream("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt",true);
            /**
             * FOS的构造函数有一个参数append,默认值为false,表示覆盖
             * 如果设置为true,那么每次输出内容会追加在原来文件内容之后,就不覆盖
             */
            //4.使用流对象
            out.write(97);
            out.write(97);
            out.write(97);

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
            out.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}
package cn.tedu.file;

import java.io.*;

/**
 * 本类用于测试字符输出流
 * @author ZHU
 * @create 16/08/2021 17:22
 */
public class TestOut2 {
    public static void main(String[] args) {
  //      method1();//用于完成普通字符输出流
       method2();//用于完成高效字符输出流
    }

    private static void method2() {

        Writer out = null;
        try{
            //3.创建高效字符输出流对象
        out = new BufferedWriter(new FileWriter(new File("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt")));
        out = new BufferedWriter(new FileWriter("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt"));

        out.write(101);
        out.write(101);
        out.write(101);
        out.write(101);
        out.write(101);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    private static void method1() {
        Writer out = null;
        try{
            out = new FileWriter(new File("C:\\Users\\seniorzhu\\Documents\\TestFile\\1.txt"),true);
         //   out = new FileWriter("C:\\Users\\seniorzhu\\Documents\\TestFile\1.txt");

            out.write(100);
            out.write(100);
            out.write(100);
            out.write(100);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

字节输入流
InputStream 抽象类,不能new,可以作为超类,学习其所提供的共性方法
–FileInputStream 子类,操作文件的字节输入流,普通类
–BufferedInputStream 子类,缓冲字节输入流,普通类
字符输入流
Reader 抽象类,不能new,可以作为超类,学习其所提供的共性方法
–FileReader,子类,操作文件的字符输入流,普通类
–BufferedReader,子类,缓冲字符输入流,普通类
字节输出流
OutputStream 抽象类,不能new,可以作为超类,学习其所提供的共性方法
–FileOutputStream 子类,操作文件的字节输出流,普通类
–BufferedOutputStream 子类,缓冲字节输出流,普通类
字符输出流
Writer 抽象类,不能new,可以作为超类,学习其所提供的共性方法
–FileWriter,子类,操作文件的字符输出流,普通类
–BufferedWriter,子类,缓冲字符输出流,普通类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值