이 기사는 자신의 이해를 포함하여 Java 독점 파일 쓰기를 해결하는 5 가지 방법을 설명합니다. 부적합한 것이 있으면 제안을 환영합니다.
솔루션 1 : randomAccessFile 의 파일 작동 옵션 s, s는 동기화 잠금 모드에서 쓰기를 의미합니다.
randomAccessFile 파일 = 새로운 randomAccessFile (파일, "rws");
솔루션 2 : FilEchannel 의 파일 잠금을 사용하십시오
파일 = 새 파일 ( "test.txt"); fileInputStream fis = new FileInputStream (file); filechannel 채널 = fis.getChannel (); filelock filelock = null; while (true) {filelock = channel.rylock (0, long.max_value, false); // true는 공유 잠금을 의미하며, false는 (filelock! = null) break 인 경우 독점 잠금입니다. else // 잠금 수면을 차지하는 다른 스레드가 있습니다 (1000);} 솔루션 3 : 먼저 임시 파일로 작성할 컨텐츠를 작성한 다음 임시 파일의 이름을 변경합니다 (Hack Scheme은 Buffering + Atomic 작업 원칙을 사용합니다).
공개 클래스 myfile {private String filename; public myfile (String filename) {this.filename = filename; } public synchronized void writedata (String data)는 ioexception {string tmpfilename = uuid.randomuuid (). toString ()+". tmp"; 파일 tmpfile = 새 파일 (tmpfilename); filewriter fw = 새로운 filewriter (tmpfile); fw.write (데이터); fw.flush (); fw.close (); // 이제 Temp 파일 이름을 원하는 이름으로 바꾸면이 작업은 대부분의 OS에서 원자력 작동입니다. if (! tmpfile.renameto (filename) {// 이동 실패가 실패하면 재 시도 할 수 있습니다. 솔루션 4 : 파일 경로에 따라 파일을 캡슐화하고 동기화 하여 파일 쓰기를 제어합니다.
공개 클래스 myfile {private String filename; public myfile (String filename) {this.filename = filename; } public synchronized void writedata (문자열 데이터) IoException {filewriter fw = new Filewriter (filename); fw.write (데이터); fw.flush (); fw.close (); }} 계획 5 : 내가 나 자신을 생각해 낸 계획은 그다지 정확하지 않습니다. 읽기 및 쓰기 권한 제어를 설정하도록 전환하면 쓰기 가능한 마커 설정을 시뮬레이션합니다 (운영 체제에서 고전적인 읽기 및 쓰기 문제로 변환 ...)
공개 클래스 myfile {개인 휘발성 부울 canwrite = true; 개인 문자열 파일 이름; public myfile (String filename) {this.filename = filename; } public void writedata (String data) {while (! canwrite) {try {thread.sleep (100); } catch (interuptedException IE) {} // 타임 아웃 쓰기 시간을 설정할 수 있습니다} canwrite = false; // 이제 파일을 쓰기 canwrite = true; }}위는 Java가 독점적으로 파일을 작성하는 솔루션입니다. 배웠습니까? 당신은 그것을 배우고 이해하기 위해 다른 기사를 참조 할 수 있습니다.