如何读取完整文本文件?Java中Files.readAllLines()仅读首行求助
嘿,我一眼就发现你代码里的问题啦!
问题根源
你用Files.readAllLines()其实已经正确读取了文件的所有行,但循环逻辑直接导致只返回第一行:
for (String line : lines) { return line; }
当循环第一次执行时,函数就直接return了第一行内容,整个方法立刻终止,后面的行根本没机会被处理,所以你只能拿到第一行数据。
另外还要提醒你:原代码里参数path和局部变量Path path重名了,这会导致编译错误;空的catch块会隐藏异常信息,出问题时很难排查原因。
解决办法
下面给你几个不同场景的解决方案:
方案1:拼接所有行成单个字符串返回
如果你需要把文件所有内容拼成一个字符串返回,可以用StringBuilder累加每行内容:
public static String dateiEinlesen(String path, String name) { Path filePath = Paths.get(path, name); // 修正变量名重复问题 Charset charset = Charset.forName("UTF-8"); try { List<String> lines = Files.readAllLines(filePath, charset); StringBuilder contentBuilder = new StringBuilder(); for (String line : lines) { contentBuilder.append(line).append(System.lineSeparator()); // 保留原文件换行符 } return contentBuilder.toString().trim(); // 移除最后多余的换行 } catch (IOException e) { e.printStackTrace(); // 打印异常方便排查问题 return "File could not be read! "; // 修正原拼写错误 } }
方案2:直接返回所有行的列表
如果不需要拼接字符串,直接返回List<String>会更灵活,方便后续对每行数据单独处理:
import java.util.Collections; import java.util.List; // 其他必要导入省略 public static List<String> dateiEinlesen(String path, String name) { Path filePath = Paths.get(path, name); Charset charset = Charset.forName("UTF-8"); try { return Files.readAllLines(filePath, charset); } catch (IOException e) { e.printStackTrace(); return Collections.emptyList(); // 返回空列表替代错误字符串,更符合返回类型语义 } }
方案3:Java 11+ 更简洁的读取方式
如果你使用的是Java 11或更高版本,可以直接用Files.readString()一次性读取整个文件内容,代码会简洁很多:
public static String dateiEinlesen(String path, String name) { Path filePath = Paths.get(path, name); try { return Files.readString(filePath, Charset.forName("UTF-8")); } catch (IOException e) { e.printStackTrace(); return "File could not be read! "; } }
内容的提问来源于stack exchange,提问作者Modo
相关产品推荐
相关产品推荐

