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

좋은 웹페이지 즐겨찾기