Java 多线程写文件
程序员文章站
2022-04-13 23:45:26
...
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); } } }