You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串数组正确输出至文件?解决打印对象地址问题

问题解决:Java输出数组内容到文件而非对象地址

核心问题原因

你直接调用pw.println(arr)时,Java会使用数组默认的toString()方法(继承自Object类),输出格式就是[Ljava.lang.String;@xxxxxx这种对象标识,而非数组的实际内容。另外你的代码还有两个隐藏问题:

  • pw.close()放在while循环内部,第一次循环就会关闭输出流,后续所有内容都无法写入文件
  • if(file.exists()) { file.createNewFile(); }逻辑错误,应该是文件不存在时才创建,且其实PrintWriter会自动创建不存在的文件,这部分代码可以简化

解决方案

方案1:输出数组最后一个元素(和控制台保持一致)

把文件输出的代码改成和控制台一样,直接打印数组的最后一个元素,同时修正流关闭的位置:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;

public class FileProcessor {
    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("C:\\rd\\bubble.txt"));
            File file = new File("C:\\rd\\bubble_out.txt");
            PrintWriter pw = new PrintWriter(file);

            String line;
            while ((line = br.readLine()) != null) {
                String[] arr = line.split("\\s+");
                String lastElement = arr[arr.length - 1];
                System.out.println(lastElement);
                pw.println(lastElement); // 输出最后一个元素而非数组对象
            }
            pw.close(); // 循环结束后再关闭流
            br.close();
        } catch (IOException x) {
            System.out.println("文件操作异常: " + x.getMessage());
        }
    }
}

方案2:输出整个数组的内容

如果需要输出整个数组的字符串形式(比如[元素1, 元素2, 元素3]),需要使用java.util.Arrays工具类的toString()方法,记得导入该类:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.File;
import java.io.PrintWriter;
import java.io.IOException;
import java.util.Arrays; // 导入Arrays类

public class FileProcessor {
    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("C:\\rd\\bubble.txt"));
            PrintWriter pw = new PrintWriter("C:\\rd\\bubble_out.txt"); // 直接传入路径简化代码

            String line;
            while ((line = br.readLine()) != null) {
                String[] arr = line.split("\\s+");
                System.out.println(arr[arr.length - 1]);
                pw.println(Arrays.toString(arr)); // 使用Arrays.toString转换数组为字符串
            }
            pw.close();
            br.close();
        } catch (IOException x) {
            System.out.println("文件操作异常: " + x.getMessage());
        }
    }
}

更简便的实现方式(Java 8+)

使用Files.lines配合流操作,可以大幅简化代码,无需手动管理流:

import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.stream.Collectors;

public class FileProcessor {
    public static void main(String[] args) {
        try {
            // 读取文件每行,提取最后一个元素,收集为字符串并写入输出文件
            String result = Files.lines(Paths.get("C:\\rd\\bubble.txt"))
                    .map(line -> line.split("\\s+"))
                    .map(arr -> arr[arr.length - 1])
                    .collect(Collectors.joining(System.lineSeparator()));

            Files.write(Paths.get("C:\\rd\\bubble_out.txt"), result.getBytes());
            // 控制台输出可以单独处理,或者直接打印result
            System.out.println(result);
        } catch (IOException x) {
            System.out.println("文件操作异常: " + x.getMessage());
        }
    }
}

这个方式利用Java流API,自动处理流的打开和关闭,代码更简洁易读。

内容的提问来源于stack exchange,提问作者MajorMike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:45:24