3

我有这段代码可以将文件从 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 路径 + 文件名和
  • 目的地 = 完整的本地路径 + 文件名

我想就以下问题提出一些问题:

  • 一个。性能注意事项

    1. 这会对主机 AS400 系统的 CPU 使用率产生重大影响吗?
    2. 这会对要使用的 JVM 产生很大影响吗(就内存使用而言)
    3. 将其包含在 Web 应用程序中会影响应用程序服务器的性能(这是否是一项繁重的任务)?
    4. 使用它来复制多个文件(冗余运行)会对所有相关资源造成很大负担吗?
  • 湾。代码质量

    1. 我的 IFSFileInputStream 实现是否足够,或者一个简单的 FileInputStream 对象能很好地完成这项工作?

AFAIK,我只需要 AS400 对象来确保引用的源文件是来自 IFS 的文件。

我是 AS400 和 IFS 的菜鸟,我想向有经验的人征求诚实的意见。

4

2 回答 2

1

请参阅 IBM 帮助示例代码:

http://publib.boulder.ibm.com/infocenter/iadthelp/v7r1/index.jsp?topic=/com.ibm.etools.iseries.toolbox.doc/ifscopyfileexample.htm

问候

于 2013-01-05T14:18:26.783 回答
1

总而言之,它看起来不错(无需尝试)。它不应该有明显的影响。

  • in.read() 可能返回 0。改为测试 -1。
  • 无需手动缓冲,只需使用各自的 BufferedInputStream/BufferedOutputstream 进行换行,一次读取一个字符并测试它是否为 -1。
  • try-catch 很难变得漂亮。这样做可以,但是您稍后会获得更多经验并学习如何做得更好。
  • 不要吞下异常并打印它们。调用你的代码将不知道它是否顺利。
  • 完成 AS400 对象后,使用 as400.disconnectAllServices()。
于 2012-06-26T10:52:04.927 回答