开发者社区 问答 正文

reader.readLine()卡住不返回 报错

读取交易所的行情文件,

fis = new FileInputStream(file);
isr = new InputStreamReader(fis, encoding);
reader = new BufferedReader(isr);
String lineTxt;
int row = 0;
while ((lineTxt = reader.readLine()) != null) {

读到了前面几行后readLine()方法就卡住了,文件是通过windows共享挂载到linux的。

 

展开
收起
kun坤 2020-06-06 16:44:08 2429 分享
分享
版权
举报
阿里云 AI 助理回答

遇到这种情况,可能是因为文件读取时遇到了一些问题,比如编码不匹配、文件权限不足、网络延迟导致的文件访问不稳定或者是文件格式问题等。以下是一些建议,希望能帮助到您:

  1. 检查文件编码: 确保encoding变量设置的字符编码与文件的实际编码相匹配。如果不匹配,可能会在读取某些特殊字符时出现问题。您可以尝试使用平台默认的编码(如Charset.defaultCharset())或者明确指定文件的正确编码(如UTF-8)。

  2. 文件访问权限: 确认Linux系统下的用户有足够的权限去读取挂载的Windows共享文件。可以通过ls -l命令查看文件权限,并通过chmod, chown命令调整权限和所有者。

  3. 网络和文件系统稳定性: 由于文件是通过网络挂载的,网络延迟或不稳定可能导致读取操作卡顿。检查网络连接状况,确保SMB/CIFS服务稳定运行,考虑是否有网络拥堵或服务器负载过高的情况。

  4. 缓冲区大小: BufferedReader内部有缓冲机制,但有时较大的文件或特定情况下,调整缓冲区大小可能有助于提高读取效率。虽然Java默认的缓冲区大小通常足够,但您也可以尝试自定义一个BufferedReader并指定更大的缓冲区大小,例如:new BufferedReader(new InputStreamReader(fis, encoding), 1024*1024)

  5. 资源泄露检查: 确保在读取完毕后正确关闭了所有的流(fis, isr, reader)。使用try-with-resources语句可以自动管理资源,避免忘记关闭:

    try (FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis, encoding);
        BufferedReader reader = new BufferedReader(isr)) {
       // 读取逻辑...
    } catch (IOException e) {
       e.printStackTrace();
    }
    
  6. 日志记录: 在读取过程中加入日志记录,特别是异常处理部分,可以帮助定位问题发生的具体位置和原因。

如果以上方法都不能解决问题,建议直接在Linux系统中用简单的文本编辑器(如vimless)尝试打开文件,看是否能正常显示内容,以进一步判断是代码问题还是文件/系统配置问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等