私は先週から Apache Commons FTP Library を扱ってきましたが、これは大変な苦痛です。どのオンライン FTP にも接続できませんが、アクセスできないルーターの設定に問題がある可能性があります。とにかく、ハード ドライブにローカル FTP を作成するために IIS を使用しました。やっとこのFTPで接続できました。
涼しい。この FTP は Internet Explorer でも動作します。
ftpGetCurrentWorkingDirectory() 関数も正常に動作し、文字列「/」を返します
しかし、listFiles 関数にはクラッシュがあります (2 番目のメソッドは、最初のメソッドを呼び出す別のスレッドにあります)。
public static void ftpPrintFilesList(String dir_path) {
try {
Log.e(TAG, "1");
FTPFile[] ftpFiles = mFTPClient.listFiles(dir_path);
int length = ftpFiles.length;
Log.e(TAG, "2, length: " + length);
for (int i = 0; i < length; i++) {
String name = ftpFiles[i].getName();
boolean isFile = ftpFiles[i].isFile();
Log.e(TAG, "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"+ name);
if (isFile) {
Log.i(TAG, "File : " + name);
} else {
Log.i(TAG, "Directory : " + name);
}
Log.e(TAG, "3 ????"+ name);
}
} catch (Exception e) {
Log.e(TAG, "4 ####");
e.printStackTrace();
}
}
public void run(){
if(FTP.ftpConnect(host, user, password, 21))
{
DotNetWSActivity.rslt="connected";
}
else
{
DotNetWSActivity.rslt="disconnected";
}
//DotNetWSActivity.rslt2 = "cookie monster";
FTP.ftpPrintFilesList(FTP.ftpGetCurrentWorkingDirectory());
Boolean status1 = FTP.ftpDownload("test.txt", "/storage/sdcard");
}
ログは、listFiles がキャッチされる例外を生成することを示しています。FTP.ftpGetCurrentWorkingDirectory() の代わりに「/」を渡そうとしましたが、違いはありません。.toString() を試してみましたが、まだ何もありません。私のローカル ftp は空ではありません。いくつかのファイルがあり、それらはエクスプローラーから見ることができます。FTP に正常に接続できるため、'FTP' は正しいオブジェクトです。
このライブラリの私のアプローチ/使用法で何が間違っているのか分かりますか?
私の問題に対する答えがない場合は、http
://www.enterprisedt.com/products/edtftpj/overview.html の使用を検討します。
///////////////////////////////////////////////
_ ////////////////
上記のログを以下に添付します:
////////////////////////// //////
////////////////////////////////
10-17 09:51:05.312: I/Choreographer(967): Skipped 45 frames! The application may be doing too much work on its main thread.
10-17 09:51:33.881: D/gralloc_goldfish(1015): Emulator without GPU emulation detected.
10-17 09:52:00.761: I/Choreographer(1015): Skipped 36 frames! The application may be doing too much work on its main thread.
**10-17 09:52:52.111: E/(1015): 1**
**10-17 09:52:52.654: E/(1015): 4 ####**
10-17 09:52:52.661: W/System.err(1015): java.net.ConnectException: failed to connect to /127.0.0.1 (port 49867): connect failed: ECONNREFUSED (Connection refused)
10-17 09:52:52.692: W/System.err(1015): at libcore.io.IoBridge.connect(IoBridge.java:114)
10-17 09:52:52.692: W/System.err(1015): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
10-17 09:52:52.701: W/System.err(1015): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
10-17 09:52:52.701: W/System.err(1015): at java.net.Socket.startupSocket(Socket.java:566)
10-17 09:52:52.711: W/System.err(1015): at java.net.Socket.tryAllAddresses(Socket.java:127)
10-17 09:52:52.711: W/System.err(1015): at java.net.Socket.<init>(Socket.java:177)
10-17 09:52:52.711: W/System.err(1015): at java.net.Socket.<init>(Socket.java:149)
10-17 09:52:52.711: W/System.err(1015): at javax.net.DefaultSocketFactory.createSocket(DefaultSocketFactory.java:40)
10-17 09:52:52.721: W/System.err(1015): at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:502)
10-17 09:52:52.721: W/System.err(1015): at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2296)
10-17 09:52:52.731: W/System.err(1015): at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2269)
10-17 09:52:52.731: W/System.err(1015): at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2046)
10-17 09:52:52.731: W/System.err(1015): at com.prgguru.android.FTP.ftpPrintFilesList(FTP.java:81)
10-17 09:52:52.741: W/System.err(1015): at com.prgguru.android.Caller5.run(Caller5.java:25)
10-17 09:52:52.751: W/System.err(1015): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
10-17 09:52:52.801: W/System.err(1015): at libcore.io.Posix.connect(Native Method)
10-17 09:52:52.801: W/System.err(1015): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
10-17 09:52:52.811: W/System.err(1015): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
10-17 09:52:52.831: W/System.err(1015): at libcore.io.IoBridge.connect(IoBridge.java:112)
10-17 09:52:52.863: W/System.err(1015): ... 13 more
10-17 09:52:52.891: D/(1015): download failed
FTP に接続すると、すでに mFTPClient.enterLocalPassiveMode(); という行があります。
public static boolean ftpConnect(String host, String username,
String password, int port) {
try {
mFTPClient = new FTPClient();
mFTPClient.connect(host, port);
if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
boolean status = mFTPClient.login(username, password);
mFTPClient.enterLocalPassiveMode();
mFTPClient.setFileTransferMode(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);
return status;
}
} catch (Exception e) {
Log.d(TAG, "Error: could not connect to host " + host);
}
return false;
}