JAVA IO流

IO流的分类:输入流,输出流,字符流,字节流

输入输出是相对内存而言的,硬盘到内存称为输入流,内存到硬盘成为输出流。

字符流:按字符进行读取,只能操作普通文件(超文本文件txt),以Reader,Wirter结尾的io类都是字符流

字节流:按字节8个比特位读取,操作所有文件,以Stream结尾的io类都是字节流

使用注意:异常的处理,流的关闭close(),输出流每次输出时完成刷新管道flush()

 

1.FileInputStream 字节输入流读取文件(常用版)

1.1 常用IPA

FileInputStream(File file): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。

FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

当你创建一个流对象时,必须传入一个文件路径。该路径下,如果没有该文件,会抛出FileNotFoundException 。

public void close() :关闭此输入流并释放与此流相关联的任何系统资源。

public abstract int read(): 从输入流读取数据的下一个字节。

public int read(byte[] b): 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。

 1   public static void test01() throws Exception {
 2         FileInputStream fis = null;
 3         fis = new FileInputStream("OutTest.txt");
 4         byte[] readResult = new byte[10];//接收每次读取数据
 5         int readCount = 0;//每次读取数据位数
 6         //read()方法读取数据,返回读取的byte位数,-1表示已经读完
 7         while ((readCount = fis.read(readResult)) != -1) {
 8             System.out.println(new String(readResult, 0, readCount));
 9         }
10         if (fis != null) {
11             fis.close();
12         }
13     }

2.FileOutoutStream字节输出流输出文件

2.1构造方法

public FileOutputStream(File file, boolean append): 创建文件输出流以写入由指定的 File对象表示的文件。

public FileOutputStream(String name, boolean append): 创建文件输出流以指定的名称写入文件。

 2.2常用方法

public void close() :关闭此输出流并释放与此流相关联的任何系统资源。

public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。

public void write(byte[] b):将 b.length字节从指定的字节数组写入此输出流。

public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。

 public static void test03() throws Exception {
        FileOutputStream fts = new FileOutputStream("OutTest.txt", true);//true表示追加,不然每次会先清空源文件
        String res = "我是一个中国人";
        byte[] bytes = res.getBytes();
        fts.write(bytes);
        fts.flush();
        fts.close();
    }

3.利用BufferedReader带缓冲区字符输入流读取文件

 public static void test04() throws Exception {

        //  FileInputStream fis = new FileInputStream("OutTest.txt");
        // InputStreamReader isr=new InputStreamReader(fis);  //InputStreamReader流的转化
        // BufferedReader br = new BufferedReader(isr);      //处理流

        FileReader fr = new FileReader("OutTest.txt"); //节点流
        BufferedReader br = new BufferedReader(fr);      //处理流传入Reader类型的节点流
        String readContent = null;
        while ((readContent = br.readLine()) != null) System.out.println(readContent);
        br.close();
    }

4.File类用IPA

4.1构造方法

public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。

public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例

4.2常用方法

public String getAbsolutePath() :返回此File的绝对路径名字符串。

public String getPath() :将此File转换为路径名字符串。

public String getName() :返回由此File表示的文件或目录的名称。

public long length() :返回由此File表示的文件的长度。

public boolean exists() :此File表示的文件或目录是否实际存在。

public boolean isDirectory() :此File表示的是否为目录。

public boolean isFile() :此File表示的是否为文件。

public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

public boolean delete() :删除由此File表示的文件或目录。

public boolean mkdir() :创建由此File表示的目录。

public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录。

public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。

public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。 

 

5.拷贝整个文件目录

  /**
     * @param file 原目录
     * @param path 目的路径
     * @throws Exception
     */
    public static void test05(File file, String path) throws Exception {
        File outFile = new File(path);//目的目录是否存在,不存在就创建
        if (!outFile.exists()) {
            outFile.mkdir();
        }
        for (File fs : file.listFiles()) {//原目录下的所有文件以及目录。
            if (fs.isFile()) {//判断是否为文件
                FileInputStream fis = new FileInputStream(fs);
                FileOutputStream fos = new FileOutputStream(path + "//" + fs.getName(), true);
                byte[] readBytes = new byte[1024];
                int readCount = 0;
                while ((readCount = fis.read(readBytes)) != -1) {//进行源文件的读取
                    fos.write(readBytes, 0, readCount);//写入到目的文件
                    fos.flush();
                }
                fis.close();
                fos.close();
            } else {//不是文件就是目录,目录进行递归
                test05(fs, path + "//" + fs.getName());
            }
        }

 

 

  

posted @ 2021-08-06 10:08  熬夜秃头选拨赛冠军  阅读(52)  评论(0编辑  收藏  举报