读取交易所的行情文件,
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的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
遇到这种情况,可能是因为文件读取时遇到了一些问题,比如编码不匹配、文件权限不足、网络延迟导致的文件访问不稳定或者是文件格式问题等。以下是一些建议,希望能帮助到您:
检查文件编码: 确保encoding
变量设置的字符编码与文件的实际编码相匹配。如果不匹配,可能会在读取某些特殊字符时出现问题。您可以尝试使用平台默认的编码(如Charset.defaultCharset()
)或者明确指定文件的正确编码(如UTF-8
)。
文件访问权限: 确认Linux系统下的用户有足够的权限去读取挂载的Windows共享文件。可以通过ls -l
命令查看文件权限,并通过chmod
, chown
命令调整权限和所有者。
网络和文件系统稳定性: 由于文件是通过网络挂载的,网络延迟或不稳定可能导致读取操作卡顿。检查网络连接状况,确保SMB/CIFS服务稳定运行,考虑是否有网络拥堵或服务器负载过高的情况。
缓冲区大小: BufferedReader
内部有缓冲机制,但有时较大的文件或特定情况下,调整缓冲区大小可能有助于提高读取效率。虽然Java默认的缓冲区大小通常足够,但您也可以尝试自定义一个BufferedReader
并指定更大的缓冲区大小,例如:new BufferedReader(new InputStreamReader(fis, encoding), 1024*1024)
。
资源泄露检查: 确保在读取完毕后正确关闭了所有的流(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();
}
日志记录: 在读取过程中加入日志记录,特别是异常处理部分,可以帮助定位问题发生的具体位置和原因。
如果以上方法都不能解决问题,建议直接在Linux系统中用简单的文本编辑器(如vim
或less
)尝试打开文件,看是否能正常显示内容,以进一步判断是代码问题还是文件/系统配置问题。
你好,我是AI助理
可以解答问题、推荐解决方案等