Java 多线程写文件详解编程语言

import java.io.File; 
 
import java.io.IOException; 
 
import java.io.RandomAccessFile; 
 
import java.nio.channels.FileChannel; 
 
import java.nio.channels.FileLock; 
 
 
 
/** 
 
 * @author DBJ 
 
 * 
 
 */ 
 
public class MyThreadInfoWritor { 
 
 
    private String filename; 
 
    /** 
 
     * 
 
     */ 
 
    public MyThreadInfoWritor(String fileName) { 
 
        this.filename = fileName; 
 
    } 
 
 
    public void write(MyThreadInfo tInfo) { 
 
 
        RandomAccessFile out = null; 
 
        File file = new File(this.filename); 
 
        try { 
 
            if (!file.exists()) { 
 
                file.createNewFile(); 
 
                out = new RandomAccessFile(file, "rw"); 
 
            } 
 
            out = new RandomAccessFile(file, "rw"); 
 
 
            FileChannel fcout = out.getChannel(); 
 
            FileLock flout = null; 
 
            while (true) { 
 
                try { 
 
                    flout = fcout.lock(); 
 
                    break; 
 
                } catch (Exception e) { 
 
                    System.out.println("其他线程正在操作该文件,当前线程休眠1000毫秒"); 
 
                    try { 
 
                        Thread.sleep(1000); 
 
                    } catch (InterruptedException e1) { 
 
                        e1.printStackTrace(); 
 
                    } 
 
                } 
 
            } 
 
 
            long fileLength = out.length(); 
 
             out.seek(fileLength); 
 
            out.write(tInfo.toString().getBytes("utf8")); 
 
 
            flout.release(); 
 
            fcout.close(); 
 
            out.close(); 
 
            out = null; 
 
        } catch (IOException e) { 
 
            file.deleteOnExit(); 
 
            System.out.println("Exception encountered: " + e); 
 
        } 
 
    } 
 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10516.html

(0)
上一篇 2021年7月19日 10:18
下一篇 2021年7月19日 10:19

相关推荐

发表回复

登录后才能评论