2012-06-26 8 views
3

IFS에서 로컬 드라이브로 파일을 복사하는 코드 조각이 있습니다. 그리고 더 나은 방법에 대한 제안을하고 싶습니다.코드에서 JT400을 사용하는 IFS 파일 복사

public void CopyFile(AS400 system, String source, String destination){ 
    File destFile = new File(destination); 
    IFSFile sourceFile = new IFSFile(system, source); 
    if (!destFile.exists()){ 
     try { 
      destFile.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
      IFSFileInputStream in = null; 
    OutputStream out = null; 
    try { 
     in = new IFSFileInputStream(sourceFile); 
     out = new FileOutputStream(destFile); 

      // Transfer bytes from in to out 
      byte[] buf = new byte[1024]; 
      int len; 
      while ((len = in.read(buf)) > 0) { 
       out.write(buf, 0, len); 
      } 
     } catch (AS400SecurityException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if(in != null) { 
        in.close(); 
       } 
       if(out != null) { 
        out.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } // end try catch finally 

} // end method 

경우

  • 소스 = 전체 IFS 경로 + 파일 이름과
  • 대상 = 전체 로컬 경로 + 파일 이름

나는 다음에 대한 몇 가지 묻고 싶다 :

  • a. 성능 고려 사항

    1. 이것은 호스트 AS400 시스템의 CPU 사용량에 큰 영향을 줍니까?
    2. (메모리 사용 측면에서) 사용되는 JVM에 큰 영향을 미칩니 까?
    3. 웹 응용 프로그램이 응용 프로그램 서버 성능에 영향을 미칠 수 있습니까?
    4. 여러 파일을 복사 (중복 실행)하여 관련된 모든 리소스에 큰 부담이됩니까?
  • b. 코드 품질

    1. IFSFileInputStream을 제대로 구현했는지 또는 간단한 FileInputStream 객체가 작업을 멋지게 처리 했습니까?

AFAIK, 방금 확인 참조 소스 파일이 IFS에서 파일이 확인하기 위해 AS400 오브젝트를 필요로했다.

저는 AS400 및 IFS에서 멍청한 사람입니다. 경험 많은 사람들로부터 정직한 의견을 묻고 싶습니다.

답변

1

전혀 (시도하지 않고) 괜찮아 보입니다. 눈에 띄는 영향을주지 않아야합니다.

  • in.read()는 0을 반환 할 수 있습니다. 대신 -1로 테스트하십시오.
  • 수동으로 버퍼링하는 대신 BufferedInputStream/BufferedOutputstream을 각각 랩 어라운드 및 아웃하고 한 번에 한 문자 씩 읽은 다음 -1로 테스트하십시오.
  • try-catch 꽤 예쁘지 않습니다. 이것은 할 것이다, 그러나 당신은 나중에 더 많은 경험을 얻고 다소 더 나은 방법을 배우게됩니다.
  • 아니요 예외를 삼아서 인쇄하십시오. 당신을 부르는 코드는 그것이 잘되었는지 아닌지 잘 모른다.
  • AS400 오브젝트와 함께 완료되면 as400.disconnectAllServices()를 사용하십시오.
+0

는 신속한 답변 Thorbjørn 주셔서 너무 감사드립니다. 나는 또한 as400.disconnectAllServices() 부분을 생각했고 그것은 내 클래스에 대한 내 정리 메소드 (destroy)의 일부가 될 것이다. 그리고 예, try-catch 블록을 더 잘 처리 할 수있는 방법을 곧 찾을 수 있기를 바랍니다. 또한 printStackTrace 대신 log4j를 사용하여 예외를 기록 할 계획입니다. 하지만 예외를 처리하고 호출 코드를 멋지게 알리는 방법은 무엇입니까? 다시 한번 감사드립니다. – aEtherv0id