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

BufferedReader读取及BufferedWriter写入后.ddm文件内容异常问题求助

问题分析与解决:.ddm文件读写内容异常

看起来你遇到了.ddm文件读写后内容乱码的问题,我来帮你拆解可能的原因和对应的解决办法。

核心原因排查

1. 文件编码不匹配(最常见诱因)

你当前使用的FileReader和FileWriter依赖系统默认字符编码处理文件,但你的.ddm文件大概率使用了其他编码(比如UTF-8、UTF-16等)。当编码不匹配时,字节会被错误解析为字符,就会出现你看到的大量分号、空格这类乱码内容。

举个例子:如果原文件是UTF-8编码,但你的系统默认编码是GBK,读取时UTF-8字节会被按GBK规则解析,直接导致字符错乱;写入时又用GBK编码保存,会进一步放大乱码问题。

2. 分隔符变量的拼写与值错误

你的代码里用到了seperatorString(注意拼写错误,正确写法是separatorString),如果这个变量的值不是";",那么line.split(seperatorString)就无法正确分割每行的tile数据。比如不小心设成空字符串或其他字符,split后的数组会完全不符合预期,后续解析和写入自然会出错。


具体解决步骤

第一步:强制指定编码读写文件

替换FileReader/FileWriter为InputStreamReader/OutputStreamWriter,并明确指定与原文件一致的编码(可以用Notepad++查看原文件编码:打开原文件,右下角会显示编码类型,比如UTF-8)。

修改读取代码:

// 替换原FileReader部分,指定UTF-8编码(根据实际编码调整)
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8));

如果涉及写入操作,同样指定编码:

// 写入时使用与原文件一致的编码
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), StandardCharsets.UTF_8));

第二步:修复分隔符变量

把代码里的seperatorString改为正确的separatorString,并明确设置分隔符为";":

String separatorString = ";"; // 明确指定tile数据的分隔符

第三步:验证写入逻辑(若涉及文件回写)

如果你的代码需要将解析后的ScreenMap写回文件,要确保每行的tile值用;分隔,且每行末尾添加换行符,和原文件格式保持一致。示例逻辑如下(根据你的ScreenMap结构调整):

// 示例写入逻辑,对应读取时的坐标反转逻辑
for (int y = height - 1; y >= 0; y--) {
    StringBuilder lineBuilder = new StringBuilder();
    for (int x = 0; x < width; x++) {
        if (x != 0) {
            lineBuilder.append(";");
        }
        // 替换为你获取tile值的实际方法
        int tileValue = result.getTile(x, y);
        lineBuilder.append(tileValue);
    }
    bw.write(lineBuilder.toString());
    bw.newLine();
}

额外调试建议

  • 用Notepad++打开原文件,确认编码类型,确保读写时使用的编码完全匹配。
  • 调试时打印tiles数组的内容,确认split后的每个元素是否是预期的数字(0、1、2、5等),如果不是,说明分隔符或编码仍有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 03:43:19