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

RandomAccessFile调用writeUTF写入文件时出现非打印字符问题

问题成因

你遇到的偏移量前置位置被非打印字符覆盖的问题,是RandomAccessFile的writeUTF()方法的固有逻辑导致的:
writeUTF()并不会直接写入字符串的文本内容,而是会先写入2个字节的无符号整数表示后续字符串的字节长度,再写入对应UTF编码的字符串内容。你观察到的两个异常字符就是这两个长度标识字节。

修复方案

你可以按照以下步骤调整代码:

  • 替换writeUTF()调用,改用直接写入字符串字节的方式
    把原有写入逻辑:
    writer.writeUTF(warpNames.get(i));
    
    改为适配文件编码的字节写入逻辑(示例为UTF-8编码,可根据你的文件实际编码调整):
    // 需导入java.nio.charset.StandardCharsets
    byte[] strBytes = warpNames.get(i).getBytes(StandardCharsets.UTF_8);
    writer.write(strBytes);
    
  • 对齐新旧内容长度
    由于你是覆盖原有内容,需要保证新写入的字符串长度和被替换的原有字符串长度完全一致:如果新字符串更短,末尾补空格占位;如果新字符串更长,截断到原有长度,避免出现原有内容残留或覆盖到无关内容的问题。
  • 修正偏移量计算逻辑
    你当前用Scanner.nextLine()读取行时,该方法会自动丢弃行尾的换行符,你计算offset时仅累加了ln.length(),没有计入换行符占用的1~2字节(Windows系统换行符为\r\n占2字节,Linux/macOS为\n占1字节),会导致实际定位的写入位置存在偏移,需要根据你的文件换行格式把对应长度加到offset计算逻辑中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:04