java写文件中并发和乱码问题解决

文件最后一行加文字

public static void writeOneLine(String append,String category,String fileName){
		FileChannel channel = null;
        FileLock lock = null;
		String path=FileOpearte.class.getResource("").toString();//文件相对路径的问题
        path=path.substring(6, path.length()-5)+"data"+"//"+category+"//"+fileName;
        File file=new File(path);
        try {


        if(!file.exists())
		{

		        file.createNewFile();

		}

	          RandomAccessFile rf=new RandomAccessFile(path,"rw");

	          channel = rf.getChannel();
	          //文件进程锁,当文件锁不可用时,当前进程会被挂起
	          //无参lock()默认为独占锁,不会报NonReadableChannelException异常,因为独占就是为了写
	          lock = channel.lock();


	          //将指针移动到文件末尾
	          rf.seek(rf.length());
	          //设置编码
	          append = new String(append.getBytes("utf-8"),"ISO8859_1");
	          rf.writeBytes(append+"\r\n"); //字符串末尾需要换行符
	          //释放锁
	          lock.release();
	          lock = null;
	          channel.close();
              channel = null;
	          rf.close();//关闭文件流
	         }catch (IOException e){
	             e.printStackTrace();
	         }finally {
	             if (lock != null) {
	                 try {
	                     lock.release();
	                     lock = null;
	                 } catch (IOException e) {
	                     e.printStackTrace();
	                 }
	             }

	             if (channel != null) {
	                 try {
	                     channel.close();
	                     channel = null;
	                 } catch (IOException e) {
	                     e.printStackTrace();
	                 }
	             }

	         }
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值