java文件操作2

一、FileReader和FileWriter

1.FileReader
首先来介绍一下FileReader类。FileReader类可用于读取字符流和文本文件。它提供了多个构造函数,其中最常用的是接受一个文件名或File对象作为参数的构造函数。在使用FileReader类时,需要注意一些异常情况,如文件不存在、文件无法读取等。为此,我们可以使用try-catch块来捕获这些异常,并添加适当的处理逻辑。

简单使用:

public class Demo9_FileReader {
    public static void main(String[] args) throws IOException {
    	//创建FileWriter对象
        FileReader fr = new FileReader("src/com/IOSteam/file/a.txt");
        int b;
        while ((b=fr.read())!=-1){//通过项目码表一次读取一个字符
            System.out.print((char)b);
        }
        fr.close();
    }
}

创建了FileReader对象后,就可以使用它来读取文件内容了。FileReader类提供了多个读取字符流的方法,如read()、read(char[])和read(char[], int, int)等。这些方法都会返回读取到的字符数,如果已经到达文件末尾,则返回-1。


2.FileWriter
FileWriter类用于向文本文件中写入数据。它也提供了多个构造函数,其中最常用的是接受一个文件名或File对象作为参数的构造函数。在使用FileWriter类时,同样需要注意异常情况,如文件无法写入、磁盘空间不足等。因此,建议在使用FileWriter类时添加try-catch块来捕获异常并进行相应的处理。

简单使用:

public class Demo10_FileWriter {
    public static void main(String[] args) throws IOException {
    	//创建FileWriter对象
        FileWriter fw = new FileWriter("src/com/IOSteam/file/b.txt");
        fw.write("大家好我是xxx");
        fw.close();
    }

下面我们利用FileWriter和FileReader实现一个简单的文件拷贝:

public class Demo11_CharStreamCopy {
    public static void main(String[] args) throws IOException {
        FileReader fr= new FileReader("src/com/IOSteam/file/a.txt");
        FileWriter fw = new FileWriter("src/com/IOSteam/file/b.txt");
        int b;
        char[] arr = new char[1024];
        while ((b=fr.read(arr))!=-1){
            System.out.println(b);
//fw.write(arr, 0, b) 表示将 arr 数组中从下标为 0 开始的前 b 个元素写入到输出流中。其中,arr 是要写入的字符数组,0 是起始位置,b 是要写入的字符数量。
            fw.write(arr,0,b);
        }
        fr.close();
        fw.close();
    }
}

三、BufferedReader和BufferedWriter

BufferedReader和BufferedWriter是Java语言中常用的字符缓冲流类,它们分别用于高效地读取和写入文本数据。


1.BufferedReader类的使用
创建BufferedReader对象
为了使用BufferedReader类读取文件,我们需要先创建一个FileReader对象,然后将其作为参数传递给BufferedReader构造函数。

FileReader fileReader = new FileReader("filename.txt");
BufferedReader reader = new BufferedReader(fileReader);

读取文件内容
创建了BufferedReader对象后,就可以使用它来读取文件内容了。BufferedReader类提供了多个读取字符流的方法,如read()、read(char[])和readLine()等。这些方法都会返回读取到的字符数或字符串,如果已经到达文件末尾,则返回null。
下面是一个简单的例子,演示如何使用BufferedReader类读取文本文件的内容:

try (BufferedReader reader = new BufferedReader(new FileReader("filename.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

2.BufferedWriter类的使用
与BufferedReader类不同,要使用BufferedWriter类写入文件时,我们只需创建一个FileWriter对象,然后将其作为参数传递给BufferedWriter构造函数即可

FileWriter fileWriter = new FileWriter("filename.txt");
BufferedWriter writer = new BufferedWriter(fileWriter);

创建了BufferedWriter对象后,就可以使用它来写入文件内容了。BufferedWriter类提供了多个写入字符流的方法,如write(int)、write(char[])和write(String)等。这些方法都会将字符写入输出流。
写入文件内容:

try (BufferedWriter writer = new BufferedWriter(new FileWriter("filename.txt"))) {
    String data = "Hello, World!";
    writer.write(data);
} catch (IOException e) {
    e.printStackTrace();
}

下面用文件拷贝例子简单使用一下这两个对象:

/*带缓冲区的流中的方法
* readLine()读取一个文本行,遇到\n,\r就结束
* newLine()写入一个换行
* */
public class Demo12_BufferReadWriter {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("src/com/IOSteam/file/a.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src/com/IOSteam/file/b.txt"));
        String line;
        while ((line=br.readLine())!=null){
            bw.write(line);
            bw.newLine();//写出回车换行符
        }
        br.close();
        bw.close();
    }
    public static void test() throws IOException{
        BufferedReader br = new BufferedReader(new FileReader("src/com/IOSteam/file/a.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src/com/IOSteam/file/b.txt"));
        int b;
        while ((b=br.read())!=-1){
            bw.write((char)b);
        }
        br.close();
        bw.close();
    }
}

四、LineNumberReader

2023/5/23 09:34:32

LineNumberReader是Java中的一个类,它可以在读取文本文件时,自动记录每行的行号。使用LineNumberReader可以方便地获取当前读取到文件的哪一行。

以下是一个示例代码,展示如何使用LineNumberReader来读取一个文本文件,同时输出每行的行号和文本内容:

import java.io.*;

public class ReadFileWithLineNumbers {
    public static void main(String[] args) {
        try {
            File file = new File("test.txt");
            FileReader reader = new FileReader(file);
            LineNumberReader lineNumberReader = new LineNumberReader(reader);

            String line;
            while ((line = lineNumberReader.readLine()) != null) {
                int lineNumber = lineNumberReader.getLineNumber();
                System.out.println("Line " + lineNumber + ": " + line);
            }

            lineNumberReader.close();
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

五、InputStreamReader和OutputStreamWriter

InputStreamReader和OutputStreamWriter是Java中的两个类,它们可以用于将字节流转换为字符流,或者将字符流转换为字节流。这两个类通常用于处理文本文件,或者网络传输中的数据。

下面是一个简单的示例,演示如何使用InputStreamReader读取一个文本文件,并使用OutputStreamWriter将其写入到另一个文件中:

import java.io.*;

public class CopyFile {
    public static void main(String[] args) {
        try {
            File inputFile = new File("input.txt");
            FileInputStream inputStream = new FileInputStream(inputFile);
            InputStreamReader reader = new InputStreamReader(inputStream);

            File outputFile = new File("output.txt");
            FileOutputStream outputStream = new FileOutputStream(outputFile);
            OutputStreamWriter writer = new OutputStreamWriter(outputStream);

            int data;
            while ((data = reader.read()) != -1) {
                char character = (char) data;
                writer.write(character);
            }

            reader.close();
            writer.close();
            inputStream.close();
            outputStream.close();

            System.out.println("File copied successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

六、SequenceInputStream

SequenceInputStream是Java IO中的一个类,它可以将多个InputStream对象串联在一起,形成一个新的InputStream对象。这样就可以从这个新的InputStream对象中连续读取多个文件或者数据流的内容。

下面是一个简单的示例,演示如何使用SequenceInputStream读取两个文本文件的内容,并输出到控制台:

import java.io.*;

public class MergeFiles {
    public static void main(String[] args) {
        try {
            File file1 = new File("file1.txt");
            FileInputStream inputStream1 = new FileInputStream(file1);

            File file2 = new File("file2.txt");
            FileInputStream inputStream2 = new FileInputStream(file2);

            SequenceInputStream sequenceInputStream = new SequenceInputStream(inputStream1, inputStream2);
            InputStreamReader reader = new InputStreamReader(sequenceInputStream);

            int data;
            while ((data = reader.read()) != -1) {
                char character = (char) data;
                System.out.print(character);
            }

            reader.close();
            sequenceInputStream.close();
            inputStream1.close();
            inputStream2.close();

            System.out.println("Files merged successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的代码中,我们首先创建了两个FileInputStream对象分别用于读取"file1.txt"和"file2.txt"两个文件的内容。然后将这两个输入流对象作为参数,创建一个SequenceInputStream对象。

接着我们创建了一个InputStreamReader对象,将SequenceInputStream对象作为参数传递给它,这样我们就可以从这个新的InputStream对象中连续读取两个文件的内容。

在while循环中,我们逐个字符地读取InputStreamReader对象中的数据,并将其输出到控制台。最后,在程序结束时关闭所有打开的资源。

需要注意的是,SequenceInputStream会按照它们被传入的顺序,依次从每个输入流中读取数据。如果一个输入流读取完毕,将自动切换到下一个输入流。此外,SequenceInputStream本身并不缓存任何数据,因此在使用时要保证每个输入流都已经准备好了数据。

总结

除了基本的读取和写入功能外,FileReader和FileWriter还支持其他许多操作,例如读取行、读取指定长度的字符、追加数据等。在使用这些功能时,需要详细阅读API文档并了解其用法。

总之,FileReader和FileWriter是Java语言中非常实用的文件操作类,它们可以帮助我们轻松地读取和写入文本文件。在使用它们时,需要注意异常情况,并适当处理这些异常。此外,还可以利用它们提供的其他函数来实现更多功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝朽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值