0

您好,我正在使用 Apache Commons FTP 客户端,我想显示 FTP 客户端使用的 FTP 命令,就像我使用 changeWorkingDirectory 时一样,它应该显示它使用的 FTP 命令,例如:CODEOFCOMMAND CHD .....

或者当我上传文件时,它应该显示:CODEOFCOMMAND PUT ....

有没有可能这样做?

4

3 回答 3

5

您可以在Apache Commons Net FAQ中找到它:

问:如何调试 FTP 应用程序?

A:可以添加协议命令监听;例如:

ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));
于 2012-11-09T09:51:45.263 回答
0

-它是向实施者(在本例中为程序员)隐藏实施的最重要方面之一。Object Oriented Programming

-当您使用Apache's commons libraryftp,您可以使用该功能,因为实现是隐藏的。

于 2012-11-09T09:40:17.950 回答
0

在这里为也需要它的人:

首先做:

redirectSystemStreams();
ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true));

但是因为我在 GUI 中使用了 JTextArea,并且我需要在那里的输出,所以我可以通过创建这些方法来重定向输出(将 txtLog 替换为您的 TextArea):

private void updateTextArea(final String text) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                txtLog.append(text);
            }
        });
    }

    private void redirectSystemStreams() {
        OutputStream out = new OutputStream() {
            @Override
            public void write(int b) throws IOException {
                updateTextArea(String.valueOf((char) b));
            }

            @Override
            public void write(byte[] b, int off, int len) throws IOException {
                updateTextArea(new String(b, off, len));
            }

            @Override
            public void write(byte[] b) throws IOException {
                write(b, 0, b.length);
            }
        };

        System.setOut(new PrintStream(out, true));
        System.setErr(new PrintStream(out, true));
    }
于 2012-11-09T10:52:06.723 回答