Java 多线程写文件

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

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

        }

    }

}