在Java编程中,读取字符串是一项基础且常用的操作,无论是处理用户输入、读取文件内容,还是解析网络数据,都离不开字符串的读取,本文将详细介绍Java中读取字符串的多种方法,涵盖从控制台读取、从文件读取到使用高级I/O流的不同场景,帮助开发者根据实际需求选择最合适的方案。

从控制台读取字符串
从控制台读取字符串是Java入门阶段最常见的操作,主要通过Scanner类和BufferedReader类实现。
使用Scanner类
Scanner类是Java 5引入的便捷输入工具,位于java.util包中,它提供了多种方法读取不同类型的数据,包括字符串,通过Scanner读取字符串时,可以使用next()和nextLine()两种方法,两者的主要区别在于是否读取换行符。
- next()方法:读取输入中的下一个字符串,以空格作为分隔符,不会读取换行符,当用户输入”Hello World”时,
next()方法只返回”Hello”。 - nextLine()方法:读取当前行的剩余内容,包括空格,直到遇到换行符,输入”Hello World”后,
nextLine()方法会返回”Hello World”。
使用Scanner的基本步骤如下:
- 导入
java.util.Scanner包。 - 创建
Scanner对象,参数为System.in,表示从标准输入流读取数据。 - 调用
next()或nextLine()方法读取字符串。 - 使用完毕后调用
close()方法关闭Scanner,释放系统资源。
示例代码:
import java.util.Scanner;
public class ConsoleInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个字符串:");
String input = scanner.nextLine();
System.out.println("你输入的字符串是:" + input);
scanner.close();
}
}
使用BufferedReader类
BufferedReader类是Java传统的输入流类,位于java.io包中,它提供了缓冲功能,可以提高读取效率,但使用起来比Scanner稍显复杂。BufferedReader的readLine()方法可以读取一整行字符串,直到遇到换行符。
使用BufferedReader的基本步骤:
- 导入
java.io.BufferedReader和java.io.InputStreamReader包。 - 创建
InputStreamReader对象,包装System.in。 - 创建
BufferedReader对象,包装InputStreamReader。 - 调用
readLine()方法读取字符串。 - 使用完毕后关闭
BufferedReader。
示例代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ConsoleInputBuffer {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入一个字符串:");
String input = reader.readLine();
System.out.println("你输入的字符串是:" + input);
reader.close();
}
}
从文件读取字符串
从文件读取字符串是Java文件I/O操作的重要组成部分,Java提供了多种文件读取方式,包括FileReader、BufferedReader、Scanner以及Java 7引入的Files类。
使用FileReader和BufferedReader
FileReader用于读取字符文件,而BufferedReader为其提供缓冲功能,提高读取效率,两者结合使用是读取文件的经典方式。
基本步骤:
- 创建
FileReader对象,指定文件路径。 - 创建
BufferedReader对象,包装FileReader。 - 使用
readLine()方法逐行读取字符串。 - 使用完毕后关闭资源。
示例代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReadBuffer {
public static void main(String[] args) {
String filePath = "example.txt";
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用Scanner读取文件
Scanner不仅可以读取控制台输入,还可以读取文件,使用Scanner读取文件时,需要创建一个File对象作为参数。
示例代码:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FileReadScanner {
public static void main(String[] args) {
File file = new File("example.txt");
try (Scanner scanner = new Scanner(file)) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
使用Files类(Java 7+)
Java 7引入了java.nio.file包,其中的Files类提供了更简洁的文件操作方法。Files.readAllLines()方法可以一次性读取文件的所有行到List<String>中,适用于小文件读取。

示例代码:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class FileReadNIO {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(path);
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
从网络读取字符串
在Java中,从网络读取字符串通常涉及使用HttpURLConnection或第三方库(如Apache HttpClient、OkHttp等)发送HTTP请求,然后从输入流中读取响应数据。
使用HttpURLConnection读取网络数据
HttpURLConnection是Java标准库中用于HTTP请求的类,通过它获取输入流后,可以使用BufferedReader读取字符串。
示例代码:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class NetworkRead {
public static void main(String[] args) throws Exception {
String urlString = "https://www.example.com";
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String line;
StringBuilder response = new StringBuilder();
while ((line = reader.readLine()) != null) {
response.append(line);
}
System.out.println("响应内容:" + response.toString());
}
}
}
字符串读取的最佳实践
- 资源管理:使用
try-with-resources语句自动关闭资源,避免资源泄漏。 - 异常处理:文件操作和网络操作都可能抛出异常,需要进行适当的异常处理。
- 性能考虑:对于大文件读取,使用
BufferedReader或Files.lines()(Java 8+)进行流式处理,避免内存溢出。 - 编码问题:读取文件或网络数据时,指定正确的字符编码(如UTF-8),避免乱码。
InputStreamReader可以指定编码:new InputStreamReader(inputStream, "UTF-8")。
Java中读取字符串的方法多种多样,开发者需要根据具体场景选择合适的工具,从控制台读取时,Scanner简单易用,BufferedReader效率更高;从文件读取时,BufferedReader和Files类是常用选择;从网络读取时,HttpURLConnection结合BufferedReader可以实现基本功能,掌握这些方法并遵循最佳实践,可以高效、安全地完成字符串读取任务。

















