使用FileInputStream读取瓦片地图文件spawn.txt时出现多余空白问题
解决FileInputStream读取地图文本时出现多余空白的问题
嘿,我一眼就看出问题出在哪了——你用FileInputStream按字节读取文本的时候,把换行符也当成普通字符塞进数组里了!这些换行符在你打印的时候就变成了多余的空白行。
问题根源
FileInputStream是面向字节的流,它会读取文件里的所有字节,包括文本行末尾的换行符(Windows系统里是\r\n两个字节,Linux/macOS是\n)。你的循环不管读到什么都往spawnWorld里存,这些换行符就混进了你的地图数组,最后用System.out.println打印每个字符时,换行符本身就会输出成空白行,自然就出现了多余空白。而且你原来的打印逻辑是每个字符都换行,这也会让输出变得零散混乱,加重了空白问题。
修复方案
改用BufferedReader来按行读取文本,它能自动处理换行符,直接给你每行的有效内容。下面是修正后的代码:
package mapInit; import java.io.BufferedReader; import java.io.FileReader; public class SpawnMap { static char[][] spawnWorld = new char[30][30]; public static void main(String[] args) { try { // 用BufferedReader按行读取文本,自动跳过换行符 BufferedReader reader = new BufferedReader(new FileReader("Resources/Map/spawn.txt")); String line; int row = 0; // 逐行读取,直到文件结束或填满30行 while ((line = reader.readLine()) != null && row < 30) { // 确保每行长度足够,避免数组越界 if (line.length() >= 30) { // 把该行前30个字符复制到对应行的数组中 line.getChars(0, 30, spawnWorld[row], 0); } row++; } reader.close(); } catch (Exception e) { e.printStackTrace(); // 别空吞异常,打印出来方便调试 } // 按行列格式打印地图,每行打印完30个字符再换行 for (int i = 0; i < 30; i++) { for (int j = 0; j < 30; j++) { System.out.print(spawnWorld[i][j]); // 用print避免每个字符单独换行 } System.out.println(); // 每行结束后再换行 } } }
关键优化说明
- 用
BufferedReader替代FileInputStream:专门处理文本读取,自动过滤换行符,只保留每行的有效地图字符。 - 调整打印逻辑:
System.out.print()打印单个字符,每行结束后再用println()换行,还原地图的行列结构。 - 增加异常打印:空catch会掩盖问题,打印异常能帮你快速定位文件路径错误、权限问题等潜在问题。
- 行长度校验:避免文本行长度不足30时出现数组越界错误。
这样修改后,你再运行代码,多余的空白就会消失,地图会按正常的行列格式输出。
内容的提问来源于stack exchange,提问作者WeaponGod243
相关产品推荐
相关产品推荐

