侧边栏壁纸
博主头像
快乐江湖的博客博主等级

更多内容请点击CSDN关注“快乐江湖”

  • 累计撰写 127 篇文章
  • 累计创建 33 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

第十八章第二节:Java之文件内容读写(字节流和字符流文件)

快乐江湖
2023-05-03 / 0 评论 / 0 点赞 / 16 阅读 / 14564 字

Java文件内容读写:对于文件,按其逻辑结构可以分为无结构文件和有结构文件。其中无结构文件又称之为流式文件,具体又可以细分为二进制文件和文本文件。在Java中,提供了一组类来完成流式文件的读写操作,主要分为两类,它们的继承关系如下

  • 字节流:以byte为单位读取,针对二进制文件

    • 读取InputStream(父类)

      • FileInputStream(普通读取)
      • BufferedInputStream(高级读取)
      • ObjectInputStream(对象读取)
    • 写出OutputStream(父类)

      • FileOutputStream(普通写出)
      • BufferedInputStream(高级写出)
      • ObjectInputStream(对象写出)
  • 字符流:以char为单位读取,针对文本文件

    • 读取Reader(父类)

      • InputStreamReader (高级读取)
      • BufferedReader(普通读取)
    • 写出Writer(父类)

      • OutputStreamWriter (高级写出)
      • BufferedWriter(普通写出)

这里我们只介绍FileInputStreamFileReaderFileOutputStreamFileWriter

一:FileInputStream和FileReader

(1)FileInputStream

InputStream(父类)涉及方法如下

FileInputStream构造方法如下


如下,创建一个文件test.txt,然后在其中写入"Hello World",然后再使用FileInputStream读取

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class TestDemo7 {
    public static void main(String[] args) throws IOException {
        try(InputStream inputStream = new FileInputStream("./test.txt")) {
            while (true) {
                int b = inputStream.read();
                if (b == -1) {
                    //返回-1读取完毕
                    break;
                }
                System.out.println(b);
            }
        }
    }
}

(2)Reader

Readr涉及方法如下

FileReadr构造方法如下


使用FileReadr读取test.txt文件中的Hello World!

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

public class TestDemoo9 {
    public static void main(String[] args) throws IOException {
        try(Reader reader = new FileReader("./test.txt")){
            while (true) {
                int ret = reader.read();
                if (ret == -1) {
                    break;
                }
                char ch = (char) ret;
                System.out.println(ch);
            }
        }
    }
}

```java
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class TestDemo15 {
    public static void main(String[] args) throws IOException {
        // 输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入扫描路径:");
        File rootDir = new File(scanner.next());
        String toFind = scanner.next();

        // 扫描
        scanDir(rootDir, toFind);
    }

    private static void scanDir(File rootDir, String toFind) throws IOException {
        File[] files = rootDir.listFiles();
        if (files == null) {
            return;
        }
        for (File f : files) {
            if (f.isDirectory()) {
                scanDir(f, toFind);
            } else {
                checkFile(f, toFind);
            }
        }
    }

    private static void checkFile(File f, String toFind) throws IOException {
        // 检查文件名
        if (f.getName().contains(toFind)) {
            System.out.println(f.getCanonicalFile() + "文件中包含 " + toFind);
        }
        // 检查文件内容
        try (InputStream inputStream = new FileInputStream(f)) {
            StringBuilder stringBuilder = new StringBuilder();
            Scanner scanner = new Scanner(inputStream);
            // 按行读取
            while (scanner.hasNextLine()) {
                stringBuilder.append(scanner.nextLine() + "\n");
            }
            if (stringBuilder.indexOf(toFind) > -1) {
                System.out.println(f.getCanonicalPath() + "文件内容包含" + toFind);
            }
        }
    }
}

二:FileOutputStream和FileReader

(1)FileOutputStream

FileOutputStream构造方法如下


如下,对之前的test.txt文件进行写入操作,在其中写入"aAbBcC",然后再次运行程序,这次写入"defgh"

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class TestDemo8 {
    public static void main(String[] args) throws IOException {
        try(OutputStream outputStream = new FileOutputStream("./test.txt", true)) {
            outputStream.write(97); // a
            outputStream.write(65); // A
            outputStream.write(98); // b
            outputStream.write(66); // B
            outputStream.write(99); // c
            outputStream.write(67); // C
        }
    }
}

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class TestDemo8 {
    public static void main(String[] args) throws IOException {
        try(OutputStream outputStream = new FileOutputStream("./test.txt", true)) {
            byte[] arr = {100, 101, 102, 103, 104}; // defgh
            outputStream.write(arr);
//            outputStream.write(97); // a
//            outputStream.write(65); // A
//            outputStream.write(98); // b
//            outputStream.write(66); // B
//            outputStream.write(99); // c
//            outputStream.write(67); // C
        }
    }
}

(2)Writer

Writer涉及方法如下

FileWriter构造方法如下


使用Writertest.txt中写入"Have a nice day!"

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

public class TestDemo10 {
    public static void main(String[] args) throws IOException {
        try(Writer writer = new FileWriter("./test.txt", true)) {
            String str = "Have a nice day!";
            writer.write(str);
        }

    }
}

三:使用Scanner进行读取和PrintWriter进行写入

前面学习到过的Scanner可以配合FileInputStream使用,十分方便

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class TestDemo11 {
    public static void main(String[] args) throws IOException {
        try(InputStream inputStream = new FileInputStream("./test.txt")) {
            try(Scanner sc = new Scanner(inputStream)){
                while (sc.hasNext()) {
                    System.out.println(sc.next());
                }
            }
        }
    }
}

PrintWriter可以配合FileOutputStream使用,十分方便

import java.io.*;

public class TestDemo12 {
    public static void main(String[] args) throws IOException {
        try (OutputStream outputStream = new FileOutputStream("./test.txt")) {
            try(PrintWriter writer = new PrintWriter(outputStream)) {
                writer.println("Have a nice day please");
                writer.printf("a = %d\n", 10);
            }
        }
    }
}


0

评论区