Java 멀티스레드 쓰기 파일
3654 단어 Java 학습 시리즈프로젝트 개발과 실천
여러 개의 스레드를 호출하여 여러 개의 파일을 통합시켰는데, 당초에 다중 스레드 조작 파일로 인한 더러운 데이터를 고려하지 않아 업무에 문제가 생겼다.
해결 방법
파일 조작을 심사하는 방법은 파일에 자물쇠를 채우고 같은 시간에 한 라인만 파일을 조작할 수 있다.
코드 전시
public static void copyFile(String srcFilePath, String destFilePath)
throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
FileLock flout = null;
FileChannel fcIn = null;
FileChannel fcOut = null;
try { //
in = new FileInputStream(srcFilePath);
out = new FileOutputStream(destFilePath,true);
//
fcIn = in.getChannel();
fcOut = out.getChannel();
while (true) {
try {
flout = fcOut.lock();
break;
} catch (OverlappingFileLockException e) {
Thread.sleep(1 * 10);
}
}
ByteBuffer buffer = ByteBuffer.allocate(4096);
while (true) { // clear ,
buffer.clear(); //
int r = fcIn.read(buffer);
if (r == -1) {
break;
}
// flip
buffer.flip();
fcOut.write(buffer);
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
flout.release();
if (in != null && out != null) {
try {
in.close();
out.close();
System.out.println(" ");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}