JavaEE之——IO流与File类篇

IO流的相关类

一:IO流的分类:
按流的方向分:输出流与输入流
按流读取的数据分:字节流(一次只读取一个字节)与字符流(一次读取一个字符)
二:java.IO.*包下的四大家族流:
Java.IO.InputStream 字节输入流
Java.IO.OutputStream 字节输出流
Java.IO.Reader 字符输入流
Java.IO.Writer 字符输出流
Ⅰ,在java中以Stream结尾的都是字节流,以Reader/Writer结尾的都是字符流
Ⅱ,所有的流都实现了java.Io.closeable接口,都含有.close()方法
Ⅲ,所有的输入流都实现了Java.Io.Flushable接口,含有flush();方法
Ⅳ,
三:Io包下常见的需要掌握的流16个

  1. 文件专属
    Java.Io.FileInputStream
    Java.Io.FileOutputStream
    Java.Io.FileReader
    Java.Io.FileWriter
  2. 缓冲流专属
    Java.Io.BufferedInputStream
    Java.Io.BufferedOutputStream
    Java.Io.BufferedReader
    Java.Io.BufferedWriter
  3. 转换流——————将字节转换从字符流
    Java.Io.InputStreamReader
    Java.Io.OutputStreamWriter
  4. 数据流
    Java.Io.DateInputStream
    Java.Io.DateOutputStream
  5. 标准输出流
    Java.Io.printWrite
    Java.Io.printStream
  6. 对象专属流
    Java.Io.ObjectInputStream
    Java.Io.ObjectOutputStream

四:代码演示:

  1. FileInputStream读入
public static void main(String[] args) {
            FileInputStream fis =null;
            try {
                //创建文件流对象
                //Idea默认路径为工程Project项目根目录下
                fis = new FileInputStream("D:\\IDEA 2019\\软帝学院1\\src\\IoStream\\1.txt");
                /*int readCount = fis.read();//read()不含参数每次默认读取一个字节一般不采用*/
                int readCount=0;
                //开始读,采用byte数组
                byte[] bytes = new byte[4];//每次读取四个字节
                while((readCount = fis.read(bytes)) != -1) {//read()含参数每次默认读取bytes数组个数的个字节,返回值是读取到的个数
                    //输出到控制台bytes,0,readCount
                    System.out.println(new String(bytes,0,readCount));//byte 读取的数组,开始位置,读取个数
                }
            } catch (FileNotFoundException e) {
                //异常抛出
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //如果流不为空,则清空,分开try
                if(fis!=null){
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
  1. FileOutputStream写入

抛出异常如上

//fos = new FileOutputStream("out");//不存在则自动创建
                fos = new FileOutputStream("D:\\IDEA 2019\\软帝学院1\\src\\IoStream\\1.txt");//存在,后面true表示追加
                byte[] bytes = {97,98,99};
                fos.write(bytes);

                String s= "自学java";
            byte[] bs = s.getBytes();
            fos.write(bs);

            fos.flush();
  1. 文件复制 ——————一边读一边写
 FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            //创建输入流
            fis = new FileInputStream("D:\\IDEA 2019\\软帝学院1\\src\\IoStream\\1.txt");
            //创建输出流
            fos = new FileOutputStream("C:\\copy\\out");
            int readCount=0;
            byte[] bytes = new byte[4];
            while((readCount = fis.read(bytes)) != -1) {
                fos.write(bytes,0,readCount);
                fos.flush();
            }
  1. .FileReader 与FileWriter的使用
    与 FileInputStream和 FileOutputStream相似
    只是将byte[] 数组换成char[]数组
  2. 缓冲流——————可以不需要自定义数组,且能一行一行的读,读取的不带换行符
//节点流
        FileReader fr = new FileReader("D:\\IDEA 2019\\软帝学院1\\src\\IoStream\\1.txt");
        //包装流
        BufferedReader br = new BufferedReader(fr);

       /* //读一行
        String firstLine = br.readLine();
        System.out.println(firstLine);*/
        //循环读行
        String s =null;
        while((s = br.readLine())!= null){
            System.out.println(s);
        }
  1. 转换流——————
 //节点流
        FileInputStream fis = new FileInputStream("D:\\IDEA 2019\\软帝学院1\\src\\IoStream\\1.txt");
        //转换流
        InputStreamReader reader = new InputStreamReader(fis)
        //包装流
        BufferedReader br = new BufferedReader(reader);

  1. 数据流————结果文件加密了,要按一定顺序用DataInputStream读取
 DataOutputStream dos = new DataOutputStream(new FileOutputStream("data"));
        //写数据
        byte b= 100;
        short s = 200;
        int i =100;
        long l = 400l;
        double d= 3.14;
        float f = 3.14f;
        boolean sex = false;
        char c = 'a';

        dos.writeByte(b);
        dos.writeShort(s);
        dos.writeInt(i);
        dos.writeLong(l);
        dos.writeDouble(d);
        dos.writeFloat(f);
        dos.writeBoolean(sex);
        dos.writeChar(c);
  1. 标准输入输出流
System.out.println("what");
        //分开写
        PrintStream ps =System.out;
        ps.println("My");
        ps.println("name");

        //改变标准输出流的指向,指向”log“文件
        PrintStream printStream = new PrintStream(new FileOutputStream("log"));
        System.setOut(printStream);
        System.out.println("log");
        System.out.println("文件");

五:File类

  • File类与四大家族无关,所以File类不能完成文件的读写
  • File对象代表这什么:表示文件和路径名的抽象表达方式
  • File中常用的方法:

获取:String getName()
获取文件或目录的名称。

File getAbsoluteFile()
获取绝对路径名形式。

String getAbsolutePath()
获取绝对路径名字符串。

long length()
返回文件的大小。

long lastModified()
返回文件最后一次被修改的时间
2, 创建和删除

boolean createNewFile()
和输出流不同,如果文件不存在,则创建,如果文件存在,则不创建。

boolean delete()
删除此抽象路径名表示的文件或目录(如果删除文件夹,此文件夹必须是空内容)。

void deleteOnExit()
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。

boolean mkdir()
创建此抽象路径名指定的目录。

boolean mkdirs()
创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
3, 判断

boolean exists()
测试此抽象路径名表示的文件或目录是否存在。

boolean isFile()
测试此抽象路径名表示的文件是否是一个标准文件。

boolean isDirectory()
测试此抽象路径名表示的文件是否是一个目录。

boolean isHidden()
测试此抽象路径名指定的文件是否是一个隐藏文件。

boolean canRead()
测试应用程序是否可以读取此抽象路径名表示的文件。

boolean canWrite()
测试应用程序是否可以修改此抽象路径名表示的文件。
4, 获取目录内容
String[] list()
获取当前目录下的文件以及文件夹名,包含隐藏文件。调用list方法的File对象中封转的必须是目录,否则会发生NullPointerException异常,如果访问的系统级目录,也会发生空指针异常。如果目录存在但是没有内容,会返回一个数组,但长度为0.

File f1 = new File("C:/copy/a/b/c");
        File f2 = new File("src/IoStream/笔记.txt");
        System.out.println(f1.exists()); //判断路径是否存在
        System.out.println(f1.getPath());//获取文件路径
        System.out.println(f2.getAbsolutePath());//获取文件绝对路径
        //获取文件的子文件
        File f3 = new File("C:\\Users");
        File[] files =f3.listFiles() ;
        for(File file:files){
            System.out.println(file.getName());//获取文件名
        }
        if (!f1.exists()){
            //f1.createNewFile();//创建路径或者文件
            f1.mkdirs();       //以多重目录形式创建
        }

`

你可能感兴趣的:(Java,SE基础,java)