轉:java 獲取ftp文件大小

【注】:本代碼摘自 http://www.java2s.com
keyword:Ftp client gets server file size


import java.io.IOException;
import java.util.StringTokenizer;

import sun.net.TelnetInputStream;
import sun.net.ftp.FtpClient;

public class FtpGetFileSizeDemo {
public static int BUFFER_SIZE = 10240;

private FtpClient m_client;

private String host = "";

private String user = "";

private String password = "";

private String sDir = "";

public FtpGetFileSizeDemo() {
try {
System.out.println("Connecting to host " + host);
m_client = new FtpClient(host);
m_client.login(user, password);
System.out.println("User " + user + " login OK");
System.out.println(m_client.welcomeMsg);
m_client.cd(sDir);
System.out.println("Directory: " + sDir);
m_client.binary();
System.out.println("Success.");
} catch (Exception ex) {
System.out.println("Error: " + ex.toString());
}
}

protected void disconnect() {
if (m_client != null) {
try {
m_client.closeServer();
} catch (IOException ex) {
}
m_client = null;
}
}

public static int getFileSize(FtpClient client, String fileName)
throws IOException {
TelnetInputStream lst = client.list();
String str = "";
fileName = fileName.toLowerCase();
while (true) {
int c = lst.read();
char ch = (char) c;
if (c < 0 || ch == '\n') {
str = str.toLowerCase();
if (str.indexOf(fileName) >= 0) {
StringTokenizer tk = new StringTokenizer(str);
int index = 0;
while (tk.hasMoreTokens()) {
String token = tk.nextToken();
if (index == 4)
try {
return Integer.parseInt(token);
} catch (NumberFormatException ex) {
return -1;
}
index++;
}
}
str = "";
}
if (c <= 0)
break;
str += ch;
}
return -1;
}

}

後來發現不能獲得ftp裏中文文件的大小,解決辦法:
調用getFileSize() 之前先編解碼,然後調用getFileSize,就O了,如:
fileName=new String(fileName.getBytes("GBK"),"ISO8859-1");
而不是在第50行 (fileName = fileName.toLowerCase(); )之後去調用fileName=new String(fileName.getBytes("GBK"),"ISO8859-1");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章