IO流

File类

  • 一个File对象代表磁盘上的某个文件或文件夹

  • 构造方法

    • File(String pathname)
    • File(String parent,String child)
    • File(File parent,String child)
    package day06;
    
    import java.io.File;
    
    //测试File类
    public class demo04 {
        public static void main(String[] args) {
    //        第一种方式
            File file = new File("/Users/admin/Desktop/a.png");
            System.out.println(file);
    
    //        第二种方式
            File file1 = new File("/Users/admin/Desktop");
            File file2 = new File(file1, "a.png");
            System.out.println(file2);
    
    //        第三种方式
            File file3 = new File("/Users/admin/Desktop", "a.png");
            System.out.println(file3);
        }
    }
    
  • 成员方法:

    • createNewFile():创建文件
    • Mkdir()和mkdirs():创建目录
    • isDirectory():判断File对象是否为目录
    • isFile():判断File对象是否为文件
    • exists():判断File对象是否存在
    • getAbsolutePath():获取绝对路径
    • getPath():获取相对路径
    • getName():获取文件名
    • list():获取指定文件夹下的所有文件的文件名字
    • listFiles():获取指定文件夹下的所有文件
    package day06;
    
    import java.io.File;
    import java.io.IOException;
    
    //测试File成员方法
    public class Demo05 {
        public static void main(String[] args) throws IOException {
    //        在固定位置创建一个文件
            File file = new File("/Users/admin/Desktop/b.png");
            boolean newFile = file.createNewFile();
            System.out.println(newFile);
    
    //      在固定位置创建一个文件(这个在开发中不会使用)
            File file2 = new File("/Users/admin/Desktop/a");
            boolean a = file2.mkdir();
            System.out.println(a);
    
    //      在固定位置创建多级文件夹(可以创建多级也可以创建单级目录,实际开发使用)
            File file3 = new File("/Users/admin/Desktop/a/b/c");
            boolean b = file3.mkdirs();
            System.out.println(b);
    
    //        判断file3是否为文件夹
            System.out.println(file3.isDirectory());
    
    //        判断file3是否为文件
            System.out.println(file3.isFile());
    
    //        判断file3文件夹是否存在
            System.out.println(file3.exists());
    
            File file1 = new File("a.txt");
    //        获取绝对路径
            String absolutePath = file1.getAbsolutePath();
            System.out.println(absolutePath);
    
    //        获取相对路径
            String path = file1.getPath();
            System.out.println(path);
    
    //        获取文件名
            System.out.println(file1.getName());
    
    //        获取某个文件夹下面的所有文件名字,结果为文件名
            File file4 = new File("/Users/admin/Desktop/");
            String[] list = file4.list();
            for (String s : list) {
                System.out.println(s);
            }
    
    //        获取某个文件夹下面的所有文件,结果为文件
            File[] files = file4.listFiles();
            for (File file5 : files) {
                System.out.println(file5);
            }
        }
    }
    

IO流

  • 按数据流向分:

    • 输入流(将硬盘数据读取到内存中)
    • 输出流(将内存数据输出到硬盘中)
  • 按操作方式分:

    • 字节流(001101101010)

      • InputStream(抽象类)
      • OutputSteam(抽象类)
    • 字符流(ABCDEFGH)

      • Reader(抽象类)
      • Writer(抽象类)

字符流

Reader抽象类

  1. FileReader(普通字符输入流)
  2. BufferedReader(高效字符输入流)

Writer抽象类

  1. FileWriter(普通字符输出流)
  2. BufferedReader(高效字符输出流)

字符流读写文件

字符流只能拷贝文本文件

字符流读数据

  1. 按单个字符读取(使用完之后,一定要关闭资源)
package day06;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

//测试字符流读写文件
public class Demo06 {
    public static void main(String[] args) throws IOException {
        Reader fileReader = new FileReader("/Users/../IdeaProjects/JavaSE/src/day06/a.txt");

//        本方法不推荐使用,笨拙,一般使用下面的while循环
//        int read = fileReader.read();
//        System.out.println(read);

//        不知道循环次数,使用while
        int ch;
        while ((ch = fileReader.read()) != -1){
            System.out.println(ch);
        }

//        关闭资源
        fileReader.close();
    }
}
  1. 一次读取一个字符数组
package day06;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

//测试字符流读取数据:一次读取一个字符数组
public class Demo07 {
    public static void main(String[] args) throws IOException {
        FileReader fileReader = new FileReader("/Users/zwei_3_3/IdeaProjects/JavaSE/src/day06/a.txt");

//        按数组大小读取字符,结果放在数组中
//        char[] chars = new char[3];
//        int leng1 = fileReader.read(chars);
//        System.out.println(chars);
//        System.out.println(leng1);
//
//        读取当字符会放入容器中,覆盖之前内容
//        int leng2 = fileReader.read(chars);
//        System.out.println(chars);
//        System.out.println(leng2);
//
//        int leng3 = fileReader.read(chars);
//        System.out.println(chars);
//        System.out.println(leng3);

//        优化上面当代码
        char[] chars1 = new char[3];
        int leng;
        while ((leng = fileReader.read(chars1)) != -1){
//            将读取到内容转换成字符串,打印
//            chars1:表示要操作的数组、0:表示开始位置、leng:表示要操作的字符个数  
            String s = new String(chars1, 0, leng);
            System.out.println(s);
        }
//    关闭资源
      fileReader.close();
    }
}

字符流写数据

按单个字符写入、直接写入字符数组、写入部分数组、写入一个字符串

package day06;

import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

//测试字符流写数据:按单个字符写入
public class Demo08 {
    public static void main(String[] args) throws IOException {
        Writer fileWriter = new FileWriter("/Users/../IdeaProjects/JavaSE/src/day06/a.txt");

//        直接写入一个字符
        fileWriter.write("abc");

//        直接写入一个字符的整数表示
        fileWriter.write(99);

//        直接写入一个字符数组
        char[] chars = {'一','二','三'};
        fileWriter.write(chars);

//        写入一个字符数组的部分内容
        fileWriter.write(chars,0,2);

        fileWriter.close();
    }
}

字符流拷贝文件

  • 先用字符流读文件,在用字符流写文件实现拷贝。是上面两部分的综合。

字符缓冲流拷贝文件

package day06;

import sun.text.resources.zh.FormatData_zh_HK;

import java.io.*;

//测试缓存流拷贝文件
public class Demo09 {
    public static void main(String[] args) throws IOException {
        Reader fileReader = new FileReader("/Users/../IdeaProjects/JavaSE/src/day06/a.txt");
        BufferedReader r1 = new BufferedReader(fileReader);

        Writer fileWriter = new FileWriter("/Users/../IdeaProjects/JavaSE/src/day06/b.txt");
        BufferedWriter w1 = new BufferedWriter(fileWriter);

        int leng;
        while ((leng = r1.read()) != -1){
            w1.write(leng);
        }
        r1.close();
        w1.close();
    }
}

字符缓冲流一次读取一行

package day06;

import java.io.*;

//测试字符缓冲流:一次读取一行
public class Demo10 {
    public static void main(String[] args) throws IOException {
        Reader fileReader = new FileReader("/Users/admin/IdeaProjects/JavaSE/src/day06/a.txt");
        BufferedReader bufferedReader = new BufferedReader(fileReader);

        Writer fileWriter = new FileWriter("/Users/admin/IdeaProjects/JavaSE/src/day06/b.txt");
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

        String str;
        while ((str = bufferedReader.readLine()) != null){
            bufferedWriter.write(str);
//            一定要换行
            bufferedWriter.newLine();
        }
//        关闭资源
        bufferedReader.close();
        bufferedWriter.close();
    }
}

字节流

其他类型文件处理

InputStream抽象类

  1. FileInputStream(普通字节输入流)
  2. BufferedInputStream(高效字节输入流)

OutputStream抽象类

  1. FileOutputStream(普通字节输出流)
  2. BufferedOutputStream(高效字节输出流)

字节流读取文件

字节流按单个字节读写

package day06;

import org.omg.CORBA.WrongTransactionHolder;

import java.io.*;

//测试普通字节流一次读取一个字节
public class Demo11 {
    public static void main(String[] args) throws IOException {
        InputStream fileInputStream = new FileInputStream("/Users/admin/Desktop/a.png");

        OutputStream fileOutputStream = new FileOutputStream("/Users/admin/Desktop/b.png");

        int leng;
        while ((leng = fileInputStream.read()) != -1){
            fileOutputStream.write(leng);
        }

//        释放资源
        fileInputStream.close();
        fileOutputStream.close();
    }
}

字节流按字节数组读写

package day06;

import java.io.*;

//测试字节流拷贝文件,按字节数组读写
public class Demo12 {
    public static void main(String[] args) throws IOException {
        InputStream fileInputStream = new FileInputStream("/Users/admin/Desktop/a.png");

        OutputStream fileOutputStream = new FileOutputStream("/Users/admin/Desktop/c.png");

        byte[] bytes = new byte[1024];
        int leng;
        while ((leng = fileInputStream.read(bytes)) != -1){
            fileOutputStream.write(bytes,0,leng);
        }

//        释放资源
        fileInputStream.close();
        fileOutputStream.close();
    }
}

字节缓冲流拷贝文件

package day06;

import java.io.*;

//测试字节缓冲流拷贝文件
public class Demo13 {
    public static void main(String[] args) throws IOException {
        InputStream fileInputStream = new FileInputStream("/Users/admin/Desktop/a.png");
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

        OutputStream fileOutputStream = new FileOutputStream("/Users/admin/Desktop/b.png");
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

        int leng;
        while ((leng = bufferedInputStream.read()) != -1){
            bufferedOutputStream.write(leng);
        }
        
//        释放资源
        bufferedInputStream.close();
        bufferedOutputStream.close();
    }
}
posted @ 2021-01-20 22:17  shenpro  阅读(94)  评论(0)    收藏  举报