1

Commons NetFTPClientクラスを使用して、定期的にftpサイトをポーリングし、ファイルをダウンロードしようとしています。サイトから読み込もうとすると、スレッドが無期限にブロックされることがあります。他の誰かがこの問題に遭遇し、回避策を提供できるかどうか疑問に思いました。

FTPClientのメソッドを使用retrieveFileStream(String)してInputStreamへのハンドルを取得し、そこから読み取ろうとしています。以下は、ブロックされたスレッドの部分的なスタックトレースです。

"FTP File Poll Thread" prio=10 tid=0x083b0800 nid=0x6324 runnable [0x65b5b000..0x65b5beb0]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
        - locked <0x5c851928> (a java.io.BufferedInputStream)
        at java.io.FilterInputStream.read(FilterInputStream.java:66)
        at java.io.PushbackInputStream.read(PushbackInputStream.java:122)
        at org.apache.commons.net.io.FromNetASCIIInputStream.__read(FromNetASCIIInputStream.java:75)
        at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:170)
        at java.io.FilterInputStream.read(FilterInputStream.java:116)
4

2 に答える 2

1

java.ioがブロックされているため、java.nioパッケージを使用する必要があります。java.nioでftpを使用したことはありませんが、httpはjava.nioで機能するため、機能する必要があると想定してください。

よろしく

于 2009-11-16T20:04:42.927 に答える
0

ここで使用することになったのは、FTP操作にX秒以上かかった場合にアラートを発生させるタスクをスケジュールすることでした。私は実際にSourceforgeでjavanioftpを見つけましたが、私の状況では、クライアントを切り替える際の開発オーバーヘッドを保証するものではありません。

于 2009-11-17T08:45:38.350 に答える