Java言語でtar.gzファイルを受信するFTP転送プログラムを自作しています。
FTPClientを使用して、retrieveFile()関数にて実行しています。
OutputStreamもflushを行っていますが、受信ファイルが0バイトになってしまいます。
なにか他に考えられる原因はないでしょうか?
追記
説明不足で申し訳ありません。Apach CommonsのFTPClientのことです。
Java1.6 commons-net3.4.jarです
以下の処理では「結果ファイル」というログファイルとtar.gzファイルを受信しています。ログファイルはFTP成功していますが、tar.gzファイルが0バイトになっています。
以下ソースコード(一部抜粋)
String ftpconnect = "IP"
System.out.println(ftpconnect + "に接続します");
System.out.println(ftpport);
try {
// 接続先に接続する
fp.connect(ftpconnect,ftpport);
if (!FTPReply.isPositiveCompletion(fp.getReplyCode())) { // コネクトできたか?
// 失敗した場合
System.out.println("connection failed");
}
//==== タイムアウト時間設定 ====// fp.setSoTimeout(1200000); //20分 // 接続先にユーザ名指定してログインする if (fp.login(loginuser, password) == false) { // ログインできたか? // 失敗した場合 System.out.println("login failed"); } //==== 転送モード設定 ====// fp.setFileType(FTP.BINARY_FILE_TYPE); fp.enterLocalPassiveMode();
// 指定ディレクトリ内のファイル名を全取得
String[] flist = fp.listNames(sv_input);
String resultchk = "";
try{
//結果ファイル存在チェック
resultchk = resc.resultCheck(flist);
System.out.println(resultchk);
}catch(NullPointerException e){
System.out.println("ファイルが存在しません。");
}
// ファイルが存在する場合
if (!resultchk.isEmpty()) {
//ファイル受信
String tmp = work;
StringBuilder rsb = new StringBuilder(tmp);
File exporesult = new File(rsb.append(CheckResult.EXPORTRESULT).toString());
os = new FileOutputStream(exporesult);// クライアント側
System.out.println(resultchk);
fp.retrieveFile(resultchk, os);// サーバー側
System.out.println("抜出結果ファイル FTP GET COMPLETED");
// 結果ファイル内に"OK"の記述がある場合
if (resc.resultContents(exporesult)) {
System.out.println("抜出結果:OK");
// FTP転送実行
if (ftpflg.equals("rec")) { // ftpflg=rec(受信)
// ファイル受信
String inputfile = "";
for (int j = 0; j < flist.length; j++) { inputfile = flist[j];
if (inputfile.indexOf(".tar.gz") != -1) { // tar.gzファイルのみFTP転送実行
//転送対象のファイル名のみ取得
inputfile = inputfile.substring(inputfile.lastIndexOf("/"));
//転送対象ファイルパス生成
inputfile = clsb.append(inputfile).toString();
File input = new File(inputfile);
//同一ファイルが既に存在していた場合削除
fUtil.Deletefile(input);
//出力ファイル作成
fUtil.makefile(dir, input);
os = new FileOutputStream(input);// クライアント側
fp.retrieveFile(sv_input, os);// サーバー側
os.flush();
os.close();
System.out.println("FTP GET COMPLETED");
} else {
System.out.println("対象圧縮資産は存在しません。");
continu
}
} }
} else { System.out.println("対象圧縮資産は存在しません。");
//tar.gzファイル以外はスキップ
continue;
}
}
}
}

回答2件
あなたの回答
tips
プレビュー