Apache FTPClient for Java显示已运行的FTP命令

时间:2012-11-09 09:34:51

标签: java apache ftp client

您好我正在使用Apache Commons FTP客户端,我想显示FTP客户端使用的FTP命令,因此当我使用changeWorkingDirectory时,它应该向我显示它使用的FTP命令:CODEOFCOMMAND CHD ..... < / p>

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

有可能这样做吗?

3 个答案:

答案 0 :(得分:2)

您可以在Apache Commons Net FAQ

中找到它

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

答:您可以添加协议命令监听器;例如:

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

答案 1 :(得分:0)

- Object Oriented Programming 隐藏实施的最重要方面之一(在这种情况下,程序员)。

- 当您使用Apache's commons library作为ftp时,您可以使用该功能,因为隐藏了实现。

答案 2 :(得分:0)

这里也是需要它的人:

首先:

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

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

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));
    }