2012-07-21 3 views
0

나는 서블릿의 OutputStream을 통해 압축되어 클라이언트로 다시 스트리밍되는 서버 (예 : tomcat)에 여러 파일을 생성하는 웹 서비스를 가지고있다.자바 웹 서버에서 파일 생성하기

이 부분은 분명합니다. 내가 고민하는 부분은 이러한 파일을 관리하여 두 클라이언트가 동시에이 기능을 사용하게하는 방법입니다.

나는 여러 가지 가능한 해결책을 생각할 수 있으며 이것을 처리하는 가장 단순하고 최선의 방법은 무엇인지 모르겠다. 그리고 어떤 생각을 듣고 싶다.

예 : 디렉토리 이름에 타임 스탬프가 추가 된 디렉토리를 만들 수 있습니다. 예 : tmp_123142345 그리고 zip 파일을 스트림에 기록한 후에이 폴더를 삭제하십시오. 두 사람이 동일한 밀리 초 안에 동일한 파일을 다운로드하려고 시도하는 것은 거의 없습니다.

그러나 더 좋은 방법이 있습니까?

답변

0

가능성은 낮지 만 불가능하지는 않습니다. 이사회에서 충돌이 없다고 자랑 할 수있는 솔루션이 필요할 것입니다. :)

글로벌 동기화 카운터 이상이 있어야합니다. AtomicLong 카운터. "tmp_"+ (atomicLongCounter.addAndGet(1))

과 같은 디렉토리 이름을 만듭니다. 따라서 동일한 밀리 초 단위로 착륙하더라도 각각 고유 한 디렉토리를 갖게됩니다.

+0

좋아, 거의 비슷하지만 거의 동일합니다. 나는 더 좋은 접근 방식이 있을지도 모른다는 것을보고있었습니다. – rbanikaz

+0

AtomicLong은 정말 멋집니다. 고마워요! 'incrementAndGet'을 사용하겠습니다. http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/atomic/AtomicLong.html#incrementAndGet() – rbanikaz

0

당신의 솔루션은 괜찮은 것 같지만 실제로 파일을 삭제할 필요는 없습니다. 하루에 한 번 이러한 모든 파일을 삭제하는 작업을 태스크 관리자에 작성할 수 있습니다 (디렉토리 만 삭제). 보십시오 here, 디렉토리를 깨끗하게하는 몇 가지 솔루션이 있습니다.

+0

글쎄, 나는 범람에 대해 걱정하고 있습니다. 예배 규칙서. 예, 하루에 한 번 파일을 정리할 수 있지만 그 때 누군가가 파일을 다운로드 할 수 있는지 알고 있습니까? – rbanikaz

+0

귀하의 요지를 이해하지만 귀하의 신청서는 귀하 지역의 전세계에서 사용됩니다. 해당 위치에서 방금 사용하는 경우 새벽에 작업을 실행할 시간을 수정하여 일부 사용자가 파일을 다운로드하는 가능성을 줄입니다. – davidbuzatto

+0

세계 전반 ... 나는 느린 기간을 발견 할 수 있지만 확실하지는 않을 것입니다 ... – rbanikaz

0

java.util.UUID을 사용하지 않으시겠습니까? 파일 이름에 추가 할 수있는 고유 ID를 얻게됩니다.

+0

네, 또한 작동 할 것입니다 ... 저는 정말로 더 깨끗한 방법을 찾기를 바라고 있습니다. 아마도 그럴 것입니다. 존재하지 않는 :) – rbanikaz

0

File 클래스에있는 createTempFile 메소드를 사용할 수 있습니다. 이것은 Java가 파일을 저장할 수있는 고유 한 폴더를 만들 수있게 해줍니다 ...

관련 문제