2011-04-07 5 views
0

Java 응용 프로그램의 Linux에서는 자주 변경되는 텍스트 파일을 주기적으로 읽어야합니다. (이 텍스트 파일은 별도의 앱으로 업데이트됩니다.) 업데이트되는 즉시 파일을 읽으려고 할 때 드문 경우가 걱정됩니까? 그렇다면 어떻게하면 항상 내 읽음이 실패없이 돌아 오도록 보장 할 수 있습니까? OS가이를 처리합니까, 아니면 파일을 1/2로 읽을 수 있습니까?자주 업데이트되는 파일에서 java 읽기

감사합니다.

답변

1

읽기하지만 모두 애플 리케이션을 염두에두고 작성되어 있어야합니다.

간단히 말해, 독점 읽기/쓰기 권한으로 Java 응용 프로그램에서 파일을 열면 읽는 동안 다른 응용 프로그램을 포함하여 다른 사람이 파일을 수정하지 않도록 할 수 있습니다. FileLock 클래스는 파일에 독점적으로 액세스 할 수 있도록 도와줍니다.

다른 앱이 주기적으로 파일에 쓰려고합니다. 파일을 읽는 동시에이 작업을 수행하면 액세스가 거부되고 다른 앱이 다시 시도해야합니다. 앱이 파일을 사용할 수 없다고 기대하지 않고 치명적인 오류 상태로 처리하면 쓰기가 실패하고 앱이 데이터를 저장하지 않고 실패/종료 할 수 있기 때문에 중요한 부분입니다.

다른 앱이 항상 파일에 쓸 수 있어야하는 경우 독점적 인 읽기를 사용하지 않아야합니다. 대신 읽기 시작시 최종 수정 타임 스탬프를 확인하고 읽기가 끝나면 일관성없는 읽기를 감지해야합니다. 시간 소인이 동일하면 가서 일관성있게 읽는 것이 좋습니다.

+0

귀하의 신속하고 유용한 답변에 감사드립니다! 두 번째 시나리오에서는 다른 앱이 항상 파일에 쓸 수 있어야합니다 (실제로는 매번 덮어 씁니다). 항상 일관성없는 읽기 작업을 수행 할 수 있습니까? 아니면 파일의 유효성을 검사해야합니까? 읽기 위해 잠겨 있습니다 (다시 시도)? 다른 앱에서 독점적으로 쓰는 지 여부에 따라 달라집니다. ftp 나 리눅스 파일 복사를하는 스크립트를 통해 복사한다면 어떨까요? –

0

예, 걱정할 필요가 있습니다.

아니요, 파일이 일시적으로 로 잠겨 있지 않으면 AFAIK에 "실패"해서는 안됩니다. 예외가 발생하여 잠시 후 다시 시도하십시오. 그래도 예상보다 더 많거나 적은 데이터를 얻을 수는 있습니다.

(당신이 코드를 게시 할 경우 우리는 더 정확하게 일 것입니다 무엇에 대해 언급 할 수도 있습니다.) OS가 일관된 달성 할 수

+0

어떻게하면 데이터가 줄어들지 않았는지 알 수 있습니까? 파일을 2 배 읽었습니까? 수정 날짜를 확인 하시겠습니까? 파일은 쉼표로 구분되며 특수한 표식이나 파일 끝까지 알 수있는 방법이 없습니다 –

+0

[FileInputStream.read()] (http://download.oracle.com/ .com/javase/1.4.2/docs/api/java/io/FileInputStream.html) 그러면 그것은 얼마나 많은 바이트가 읽혔는지를 나타내는'int'를 반환 할 것이고 만약 기대했던 것과 일치하지 않는다면 최신 정보. – Mehrdad

관련 문제