>Java >java지도 시간 >Java 다중 스레드 파일 쓰기

Java 다중 스레드 파일 쓰기

大家讲道理
大家讲道理원래의
2016-11-10 10:34:181841검색

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);
 
        }
 
    }
 
}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.