Java 응용 프로그램의 Linux에서는 자주 변경되는 텍스트 파일을 주기적으로 읽어야합니다. (이 텍스트 파일은 별도의 앱으로 업데이트됩니다.) 업데이트되는 즉시 파일을 읽으려고 할 때 드문 경우가 걱정됩니까? 그렇다면 어떻게하면 항상 내 읽음이 실패없이 돌아 오도록 보장 할 수 있습니까? OS가이를 처리합니까, 아니면 파일을 1/2로 읽을 수 있습니까?자주 업데이트되는 파일에서 java 읽기
감사합니다.
Java 응용 프로그램의 Linux에서는 자주 변경되는 텍스트 파일을 주기적으로 읽어야합니다. (이 텍스트 파일은 별도의 앱으로 업데이트됩니다.) 업데이트되는 즉시 파일을 읽으려고 할 때 드문 경우가 걱정됩니까? 그렇다면 어떻게하면 항상 내 읽음이 실패없이 돌아 오도록 보장 할 수 있습니까? OS가이를 처리합니까, 아니면 파일을 1/2로 읽을 수 있습니까?자주 업데이트되는 파일에서 java 읽기
감사합니다.
읽기하지만 모두 애플 리케이션을 염두에두고 작성되어 있어야합니다.
간단히 말해, 독점 읽기/쓰기 권한으로 Java 응용 프로그램에서 파일을 열면 읽는 동안 다른 응용 프로그램을 포함하여 다른 사람이 파일을 수정하지 않도록 할 수 있습니다. FileLock 클래스는 파일에 독점적으로 액세스 할 수 있도록 도와줍니다.
다른 앱이 주기적으로 파일에 쓰려고합니다. 파일을 읽는 동시에이 작업을 수행하면 액세스가 거부되고 다른 앱이 다시 시도해야합니다. 앱이 파일을 사용할 수 없다고 기대하지 않고 치명적인 오류 상태로 처리하면 쓰기가 실패하고 앱이 데이터를 저장하지 않고 실패/종료 할 수 있기 때문에 중요한 부분입니다.
다른 앱이 항상 파일에 쓸 수 있어야하는 경우 독점적 인 읽기를 사용하지 않아야합니다. 대신 읽기 시작시 최종 수정 타임 스탬프를 확인하고 읽기가 끝나면 일관성없는 읽기를 감지해야합니다. 시간 소인이 동일하면 가서 일관성있게 읽는 것이 좋습니다.
예, 걱정할 필요가 있습니다.
아니요, 파일이 일시적으로 로 잠겨 있지 않으면 AFAIK에 "실패"해서는 안됩니다. 예외가 발생하여 잠시 후 다시 시도하십시오. 그래도 예상보다 더 많거나 적은 데이터를 얻을 수는 있습니다.
(당신이 코드를 게시 할 경우 우리는 더 정확하게 일 것입니다 무엇에 대해 언급 할 수도 있습니다.) OS가 일관된 달성 할 수어떻게하면 데이터가 줄어들지 않았는지 알 수 있습니까? 파일을 2 배 읽었습니까? 수정 날짜를 확인 하시겠습니까? 파일은 쉼표로 구분되며 특수한 표식이나 파일 끝까지 알 수있는 방법이 없습니다 –
[FileInputStream.read()] (http://download.oracle.com/ .com/javase/1.4.2/docs/api/java/io/FileInputStream.html) 그러면 그것은 얼마나 많은 바이트가 읽혔는지를 나타내는'int'를 반환 할 것이고 만약 기대했던 것과 일치하지 않는다면 최신 정보. – Mehrdad
귀하의 신속하고 유용한 답변에 감사드립니다! 두 번째 시나리오에서는 다른 앱이 항상 파일에 쓸 수 있어야합니다 (실제로는 매번 덮어 씁니다). 항상 일관성없는 읽기 작업을 수행 할 수 있습니까? 아니면 파일의 유효성을 검사해야합니까? 읽기 위해 잠겨 있습니다 (다시 시도)? 다른 앱에서 독점적으로 쓰는 지 여부에 따라 달라집니다. ftp 나 리눅스 파일 복사를하는 스크립트를 통해 복사한다면 어떨까요? –