Java读取文本文件整数并将每行拆分至数组的实现问询
Got it,我来帮你完善这段代码,实现把文本文件中的整数提取到数组里的需求。先看完整的实现,再给你拆解关键修改点:
完善后的完整代码
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; public class ReadGraphIntegers { public static void main(String[] args) { Path objPath = Paths.get("graph.txt"); if (Files.exists(objPath)) { File objFile = objPath.toFile(); // 用List动态收集所有整数,避免提前不知道总数量的问题 List<Integer> integerList = new ArrayList<>(); try (BufferedReader in = new BufferedReader(new FileReader(objFile))) { String line; // 把读行操作整合到循环条件里,更简洁 while ((line = in.readLine()) != null) { // 分割任意空白字符(空格、制表符、多个连续空格都能处理) String[] stringArray = line.split("\\s+"); for (String numStr : stringArray) { // 跳过split可能产生的空字符串(比如行首/行尾的空白) if (!numStr.isEmpty()) { try { int num = Integer.parseInt(numStr); integerList.add(num); } catch (NumberFormatException e) { // 遇到非整数内容时打印警告,不中断程序 System.err.println("跳过无效的数字格式: " + numStr); } } } } } catch (Exception e) { // 处理文件读取时的IO异常 e.printStackTrace(); } // 把List转换为int数组,满足你存入数组的需求 int[] intArray = new int[integerList.size()]; for (int i = 0; i < integerList.size(); i++) { intArray[i] = integerList.get(i); } // 可以在这里验证结果,比如打印数组内容 for (int num : intArray) { System.out.print(num + " "); } } else { System.err.println("指定文件不存在: " + objPath); } } }
关键修改点
- 用List动态收集整数:原代码每次循环创建一个新的int数组,只能存储单行的整数。如果文件有多行,或者你需要所有整数放到一个数组里,用
ArrayList<Integer>可以动态添加,避免提前不知道总元素数量的问题。 - 补全字符串转整数的逻辑:原代码里的
String...没写完,这里用Integer.parseInt(numStr)把分割后的字符串转成int类型,添加到List中。 - 增加异常处理:
- 捕获
NumberFormatException:防止文件里出现非整数内容导致程序崩溃,同时打印警告提示跳过的无效内容。 - 捕获IO异常:处理文件读取时可能出现的错误(比如权限问题、文件损坏等)。
- 捕获
- 优化循环写法:把
line = in.readLine()整合到while循环条件里,避免重复赋值,代码更简洁。 - 处理空字符串:split方法在遇到行首/行尾空白时会产生空字符串,增加判断跳过这些无效内容,避免解析错误。
补充说明
如果你的文件只有一行(就像你给出的示例内容那样),这段代码同样能正常工作,会把所有整数收集到同一个数组里。测试的时候,你可以打印intArray的内容,验证是否和文件里的数字一致。
内容的提问来源于stack exchange,提问作者Vorn
相关产品推荐
相关产品推荐

