BufferedReader.readLine()读取文件第一行会出现bug,首行第一个字符会是一个空字符

本文介绍了一个关于使用BufferedReader.readLine()方法读取文件时遇到的问题:读取第一行时首字符出现空字符(Unicode 65279)。文章提供了具体的解决方案,即通过trim()方法去除空白字符,并给出了相应的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BufferedReader.readLine()读取第一行会出现bug,首行第一个字符会是一个空字符 
BufferedReader is =new BufferedReader(new InputStreamReader(new ileInputStream(file))); 
String str =is.readLine() 
char c = str.charAt(0); 


这时你会发现并不是你文件第一行的首个字符,而是一个空字符(不是空字符串),但读取第二行就不会出现这问题。 

解决方法:就是把第一行的第一个字符去掉。 
String str =is.readLine(); 
char s =str.trim().charAt(0); 
//65279是空字符 
if(s==65279){ 
  if(str.length()>1){ 
     str=str.substring(1); 
  } 
} 




### Java 使用 BufferedReader 读取 SQL 文件时数据缺失的解决方案 当遇到 `BufferedReader` 读取 SQL 文件时发生的数据缺失问题,通常是因为文件编码、字符集设置不当或是未正确关闭流等原因造成的。为了确保能够完整无误地读取整个文件内容并防止资源泄露,建议采取以下措施: #### 正确配置输入流编码方式 确保创建 `InputStreamReader` 实例时指定了正确的字符集名称,这可以避免由于默认平台编码与实际文件编码不匹配而导致的部分字符无法识别的情况。 ```java // 创建带指定字符集的 InputStreamReader 来解析 SQL 脚本文件 try (InputStream inputStream = Files.newInputStream(Paths.get("path/to/your.sql")); Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); BufferedReader bufferedReader = new BufferedReader(reader)) { String line; while ((line = bufferedReader.readLine()) != null) { // 处理每一行的内容... } } catch (IOException e) { throw new RuntimeException(e); } ``` #### 防止最后一行丢失 有时如果文件的最后一行没有换行符,则调用 `readLine()` 方法可能不会返回该行。为了避免这种情况,在循环结束后再做一次额外检查来获取最后一条记录。 ```java StringBuilder contentBuilder = new StringBuilder(); String currentLine; while((currentLine = bufferedReader.readLine()) != null){ contentBuilder.append(currentLine).append("\n"); } // 添加此步以捕获最后一个不含 '\n' 的有效行 if(bufferedReader.ready()){ contentBuilder.append(bufferedReader.readLine()); } ``` #### 关闭资源管理 利用 try-with-resources 结构自动释放已打开的 I/O 流,从而降低因忘记手动关闭而引起的潜在错误风险[^1]。 通过上述调整可提高程序健壮性和准确性,减少因为环境差异带来的不确定性因素影响最终结果的可能性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值