2014-05-09 4 views
0

배경 : 내가 작업하고있는 서버에서 프로세스를 테스트해야합니다. 내가하고있는 일은 클라이언트쪽에 많은 파일을 만들고 서버에 업로드하는 것이다. 서버는 새 파일 (입력 dir에서 파일 이름은 고유합니다)을 모니터링하고 일단 처리 된 새 파일이 있으면 일단 완료되면 동일한 이름이지만 확장자가 다른 응답 파일을 작성하여 출력 디렉토리에 작성합니다. 처리가 실패하면 들어오는 파일을 오류 dir에 넣습니다. 문제Java - 목록에서 일치하는 쌍을 찾습니다.

10:48:47 /path/to/in/ CREATE ABCD.infile1 
10:48:55 /path/to/out/ CREATE ABCD.outfile1 

또는

10:49:11 /path/to/in/ CREATE ASDF.infile1 
10:49:19 /path/to/err/ CREATE ASDF.infile1 

을 : 나는 모든 결과 목록을 구문 분석 할 필요가 이 (자바에서 구현하는 계획 나는 출력 서버의 변경 사항을 모니터링 할 inotifywait을 사용하고 있습니다) 그래서 나는 infile을 가져 와서 같은 파일 이름 (ERR 또는 OUT에서 찾을 수 있음)과 비교하고 취해진 시간을 계산하고 성공 여부를 표시합니다. 나는 데 아이디어 (교체 아웃,에, ERR) 3 개 목록을 만들 수 있으며, 구문 분석 (의사 코드에서) 같은

inList 
outList 
errList 

for item : inList 
    if outlist.contains(item) parse; 
    else if errList.contains(item) parse; 
    else error; 

질문하십시오 : 이 효율적인가요를? 아니면이 상황에 접근하는 더 좋은 방법이 있습니까? 어쨌든, 여러분은 그것이 단 한 번만 실행하는 코드라고 생각할 것입니다. 왜 투쟁입니까?하지만 정말로 이것을 올바르게 처리하는 방법을 알고 싶습니다.

답변

0

리스트가있는 솔루션은 드라이브의 상태와 제대로 동기화되도록하고 항상로드해야하기 때문에 문제가 있습니다. 단일 위치에 저장된 파일의 용량 한도에 도달하면 더 낫습니다.

대안 당신이 가지고있는 것은 당신이 값이 저장 될 데이터베이스 사이에 path existence을 체크하기 위해 i/o API를 사용하는 것입니다.

또 다른 접근법은 파일에 실제로있는 키와 물리적 경로에 대한 정보를 저장하는 데이터베이스입니다.

만약 내가 당신이라면 나는 I/O API로 시작하여 솔루션이 비효율적으로 보이면 나중에 대체 될 수있는 간단한 인터페이스를 설계 할 것입니다.

0

"UserDefinedfileAttributeView"개념을 사용할 수 있습니다. 자신의 File 속성 (예 : "Result")을 작성하고 IN dir에있는 파일에 따라 값을 설정하십시오. 파일이 OUT dir로 이동 된 경우 "Result"= "Success"및 파일이 ERR dir로 이동 된 경우 "Result"= "Error" 나는 아래 코드를 시도하여 도움이되기를 바랍니다.

public static void main(String[] args) { 

    try{ 
    Path file = Paths.get("C:\\Users\\rohit\\Desktop\\imp docs\\Steps.txt"); 
    UserDefinedFileAttributeView userView = Files.getFileAttributeView(file, UserDefinedFileAttributeView.class); 
    String attribName = "RESULT"; 
    String attribValue = "SUCCESS"; 
    userView.write(attribName, Charset.defaultCharset().encode(attribValue)); 

    List<String> attribList = userView.list(); 
    for (String s : attribList) {    
     ByteBuffer buf = ByteBuffer.allocate(userView.size(s)); 
     userView.read(s, buf); 
     buf.flip(); 
     String value = Charset.defaultCharset().decode(buf).toString(); 
     if("SUCCESS".equals(value)){ 
      System.out.print(String.format("User defined attribute: %s", s)); 
      System.out.println(String.format("; value: %s", value)); 
      } 
     } 
    } 
    catch(Exception e){ 

    } 

IN dir에있는 모든 파일에 대해이 작업을 수행 할 수 있습니다.

관련 문제