Java 如何输入 TXT 文件:使用 FileReader 和 BufferedReader、使用 Scanner、使用 Files 类、处理异常、关闭资源。本文将详细介绍如何通过各种方法在 Java 中读取 TXT 文件,并重点讲解如何通过 FileReader 和 BufferedReader 来读取文件。
使用 FileReader 和 BufferedReader 是最常见且高效的方式之一。FileReader 用于读取文件中的字符流,而 BufferedReader 则提供了一个高效的缓冲机制,减少了 I/O 操作的次数。以下是一个简单的示例代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadFileExample {
public static void main(String[] args) {
String filePath = "path/to/your/file.txt";
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
一、使用 FileReader 和 BufferedReader
FileReader 和 BufferedReader 是 Java 中最常用的文件读取工具。FileReader 是一个字符流类,它能够读取文件中的字符数据,而 BufferedReader 是一个缓冲字符输入流类,它能够高效地读取文本数据。以下是详细介绍:
1. FileReader 的使用
FileReader 是一个简单的字符输入流类,它用于读取文件中的字符数据。FileReader 的构造方法需要一个文件名或 File 对象作为参数。以下是 FileReader 的使用示例:
import java.io.FileReader;
import java.io.IOException;
public class FileReaderExample {
public static void main(String[] args) {
String filePath = "path/to/your/file.txt";
try (FileReader fr = new FileReader(filePath)) {
int ch;
while ((ch = fr.read()) != -1) {
System.out.print((char) ch);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,FileReader 逐个字符地读取文件数据,并将其打印到控制台。
2. BufferedReader 的使用
BufferedReader 是一个缓冲字符输入流类,它能够高效地读取文本数据。BufferedReader 的构造方法需要一个 Reader 对象作为参数。以下是 BufferedReader 的使用示例:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
String filePath = "path/to/your/file.txt";
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,BufferedReader 按行读取文件数据,并将每行数据打印到控制台。
二、使用 Scanner
Scanner 是一个方便的文本扫描类,它可以解析基本类型和字符串。Scanner 可以从文件、输入流、字符串等读取数据。以下是 Scanner 的使用示例:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
String filePath = "path/to/your/file.txt";
try (Scanner scanner = new Scanner(new File(filePath))) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
在这个示例中,Scanner 按行读取文件数据,并将每行数据打印到控制台。
三、使用 Files 类
Files 类提供了很多静态方法用于文件操作,其中 readAllLines 方法可以一次性读取整个文件的所有行。以下是 Files 类的使用示例:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class FilesExample {
public static void main(String[] args) {
String filePath = "path/to/your/file.txt";
try {
List<String> lines = Files.readAllLines(Paths.get(filePath));
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,Files.readAllLines 方法一次性读取整个文件的所有行,并将其打印到控制台。
四、处理异常
在读取文件时,可能会出现各种异常情况,例如文件不存在、无法访问文件、读取文件时发生 I/O 错误等。因此,在进行文件操作时,必须适当地处理异常。常见的异常处理方式包括:
- 使用 try-catch 语句捕获异常,并在 catch 块中处理异常。
- 使用 try-with-resources 语句自动关闭资源,并确保资源在使用完毕后被正确关闭。
以下是一个示例,展示了如何处理文件读取时的异常:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ExceptionHandlingExample {
public static void main(String[] args) {
String filePath = "path/to/your/file.txt";
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(filePath));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
在这个示例中,使用 try-catch 语句捕获 IOException,并在 catch 块中打印堆栈跟踪。在 finally 块中,确保 BufferedReader 被正确关闭。
五、关闭资源
在进行文件操作时,必须确保资源在使用完毕后被正确关闭,以防止资源泄漏。常见的资源关闭方式包括:
- 使用 try-with-resources 语句自动关闭资源。
- 在 finally 块中手动关闭资源。
以下是一个示例,展示了如何使用 try-with-resources 语句自动关闭资源:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class TryWithResourcesExample {
public static void main(String[] args) {
String filePath = "path/to/your/file.txt";
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,使用 try-with-resources 语句自动关闭 BufferedReader,确保资源在使用完毕后被正确关闭。
总之,Java 提供了多种方式读取 TXT 文件,包括使用 FileReader 和 BufferedReader、Scanner、Files 类等。在进行文件操作时,必须适当地处理异常,并确保资源在使用完毕后被正确关闭。通过以上示例代码,您可以轻松地在 Java 程序中读取 TXT 文件,并根据需要处理文件数据。
相关问答FAQs:
1. 如何在Java中读取并输入txt文件?
在Java中,可以使用java.io
包中的File
和Scanner
类来读取和输入txt文件。首先,您需要创建一个File
对象来表示要读取的文件,然后使用Scanner
类来读取文件的内容并进行输入。
以下是一个简单的示例代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadTxtFile {
public static void main(String[] args) {
try {
// 创建一个File对象来表示要读取的txt文件
File file = new File("path/to/your/file.txt");
// 创建一个Scanner对象来读取文件内容
Scanner scanner = new Scanner(file);
// 循环读取文件的每一行并进行输入
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
// 关闭Scanner对象
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
请注意替换代码中的path/to/your/file.txt
为您实际的txt文件路径。
2. 如何在Java中逐行读取txt文件并进行输入?
在Java中,可以使用BufferedReader
类来逐行读取txt文件并进行输入。通过使用BufferedReader
类,您可以更高效地读取大型txt文件。
以下是一个示例代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadTxtFile {
public static void main(String[] args) {
try {
// 创建一个BufferedReader对象来读取txt文件
BufferedReader reader = new BufferedReader(new FileReader("path/to/your/file.txt"));
// 定义一个变量来保存每一行的内容
String line;
// 循环读取文件的每一行并进行输入
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 关闭BufferedReader对象
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
请注意替换代码中的path/to/your/file.txt
为您实际的txt文件路径。
3. 如何在Java中将用户的输入保存到txt文件中?
在Java中,可以使用java.io
包中的FileWriter
和BufferedWriter
类来将用户的输入保存到txt文件中。首先,您需要创建一个FileWriter
对象来表示要写入的文件,然后使用BufferedWriter
类来写入用户的输入。
以下是一个简单的示例代码:
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class WriteTxtFile {
public static void main(String[] args) {
try {
// 创建一个FileWriter对象来表示要写入的txt文件
FileWriter fileWriter = new FileWriter("path/to/your/file.txt");
// 创建一个BufferedWriter对象来写入文件内容
BufferedWriter writer = new BufferedWriter(fileWriter);
// 使用Scanner类获取用户的输入
Scanner scanner = new Scanner(System.in);
System.out.println("请输入要写入文件的内容:");
// 循环读取用户的输入并写入文件
while (scanner.hasNextLine()) {
String input = scanner.nextLine();
writer.write(input);
writer.newLine(); // 写入换行符
writer.flush(); // 刷新缓冲区
}
// 关闭BufferedWriter对象、FileWriter对象和Scanner对象
writer.close();
fileWriter.close();
scanner.close();
System.out.println("内容已成功写入文件!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
请注意替换代码中的path/to/your/file.txt
为您实际的txt文件路径。用户的输入将逐行写入文件中。
原创文章,作者:Edit2,如若转载,请注明出处:https://docs.pingcode.com/baike/444950