RandomAccessFile的使用,对文件的操作

问题点:遇到一个本地不能复现的问题,当时代码记载的日志不多,捕获到异常之后输出的e.getMessage()为null,所以不好定位具体是哪里的问题。

代码大致如下:(try中某处异常,捕获的e.getMessage()为null)

String path = tempFile + File.separator + fileName + ".htm";
		
		try {
			RandomAccessFile randomAccessFile = new RandomAccessFile(path, "rw");
			FileChannel channel=randomAccessFile.getChannel();
			FileLock lock=null;
			int retry = 300;
			while (retry > 0) {
				lock = channel.tryLock();
				if (null == lock) {
					retry --;
					Thread.sleep(1000);
				} else {
					break;
				}
			}
			if (null == lock) {
				throw new TapException("文件被锁定");
			} 
			randomAccessFile.setLength(0);
			randomAccessFile.write(document.html().getBytes("utf-8"));
			if (null != lock) 
				lock.release();
			if (null != channel) 
				channel.close();
			if (null != randomAccessFile) 
				randomAccessFile.close();
		}catch (Exception e) {
			logger.error(e.getMessage());
		} finally {
			
		}

在eclipse中可以看到高亮的地方就那么几个,如果出现了空指针异常的话, 首先document.html() 不为null是可以确定的;randomAccessFile 是new出来的,也不为null; 那只有是channel对象为null了,就是不不太确认,还有为啥randomAccessFile.getChannel();返回的是null。
在这里插入图片描述
这里将e.getMessage()改为e.getStackTrace(),打印出堆栈信息,才能具体到是哪里的问题,由于本地不能复现,只能把日志信息打印详细点,让现场复现然后提供日志再分析,后续解答为什么这里会抛异常…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值