一、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文档并了解其用法。文章来源:https://www.toymoban.com/news/detail-466060.html
总之,FileReader和FileWriter是Java语言中非常实用的文件操作类,它们可以帮助我们轻松地读取和写入文本文件。在使用它们时,需要注意异常情况,并适当处理这些异常。此外,还可以利用它们提供的其他函数来实现更多功能。文章来源地址https://www.toymoban.com/news/detail-466060.html
到了这里,关于java文件操作2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!