当前位置:编程学习 > JAVA >>

java ftp下载文件问题,用的包是commons-net-1.4.1,jar

  文件下载一直失败,那个文件我能通过retrieveFileStream读取到客户端。只能求高手指点了……
  public void loadFile(String remoteFileName,String localFileName){
        //下载文件
     OutputStream osOutputStream = null;
        try{
         File localFile = new File(localFileName);
         osOutputStream = new FileOutputStream(localFile);
        
            boolean suc = ftpClient.retrieveFile(new String(remoteFileName.getBytes("GBK"),"ISO-8859-1"),osOutputStream );
            
            if (suc) {
System.out.println("下载文件成功");
}
            else {
System.out.println("文件下载失败");
}
            osOutputStream.close();
            
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
               if (osOutputStream != null) {
osOutputStream.close();
}
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    }

     --------------------编程问答-------------------- 额……解决不了啊,网上全是这个方法,为什么我的就不行
--------------------编程问答-------------------- FTP编程,一般就三大问题,楼主看看是哪一个 ?

1.主动模式 和 被动模式 问题;
2.命令连接 和 数据连接 问题;
3.文件数据的编码传输问题。

1.客户端这边存在NAT或者PAT的时候(或者路由器,防火墙的时候),采用被动模式进行下载即可。
2.网络较慢或者文件数据较大使得数据传输时间超长,造成控制连接被中间节点(防火墙或路由器)强行断开。当然,有的服务器也会自行断开超时的控制连接。
3.传输文件可以选用ACSII码和Binary进行传输,在选用ACSII码时由于操作系统不同,回车换行符的内容有可能会被更改。
--------------------编程问答--------------------

// 设置以二进制形式传输
ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
--------------------编程问答--------------------
ftpClient.enterLocalPassiveMode();
--------------------编程问答--------------------
引用 3 楼  的回复:
Java code

// 设置以二进制形式传输
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);


都加了还是不行……再用sun的试试了只能。 --------------------编程问答-------------------- import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  

import nc.itf.doc.DocDelegator;  
import nc.vo.doc.doc_007.DirVO;  
import nc.vo.pub.BusinessException;  
import nc.vo.pub.SuperVO;  

import org.apache.commons.net.ftp.FTPClient;  
import org.apache.commons.net.ftp.FTPFile;  
import org.apache.commons.net.ftp.FTPReply;  
import org.apache.commons.net.ftp.FTP;  


public class FtpTool {  


private FTPClient ftp;  

private String romateDir = "";  

private String userName = "";  

private String password = "";  

private String host = "";  

private String port = "21";  

public FtpTool(String url) throws IOException {  
//String url="ftp://user:password@ip:port/ftptest/psd";  
int len = url.indexOf("//");  
String strTemp = url.substring(len + 2);  
len = strTemp.indexOf(":");  
userName = strTemp.substring(0, len);  
strTemp = strTemp.substring(len + 1);  

len = strTemp.indexOf("@");  
password = strTemp.substring(0, len);  
strTemp = strTemp.substring(len + 1);  
host = "";  
len = strTemp.indexOf(":");  
if (len < 0)//没有设置端口  
{  
port = "21";  
len = strTemp.indexOf("/");  
if (len > -1) {  
host = strTemp.substring(0, len);  
strTemp = strTemp.substring(len + 1);  
} else {  
strTemp = "";  
}  
} else {  
host = strTemp.substring(0, len);  
strTemp = strTemp.substring(len + 1);  
len = strTemp.indexOf("/");  
if (len > -1) {  
port = strTemp.substring(0, len);  
strTemp = strTemp.substring(len + 1);  
} else {  
port = "21";  
strTemp = "";  
}  
}  
romateDir = strTemp;  
ftp = new FTPClient();  
ftp.connect(host, FormatStringToInt(port));  

}  

public FtpTool(String host, int port) throws IOException {  
ftp = new FTPClient();  
ftp.connect(host, port);  
}  

public String login(String username, String password) throws IOException {  
this.ftp.login(username, password);  
return this.ftp.getReplyString();  
}  

public String login() throws IOException {  
this.ftp.login(userName, password);  
System.out.println("ftp用户: " + userName);  
System.out.println("ftp密码: " + password);  
if (!romateDir.equals(""))  
System.out.println("cd " + romateDir);  
ftp.changeWorkingDirectory(romateDir);  
return this.ftp.getReplyString();  
}  

public boolean upload(String pathname, String filename) throws IOException, BusinessException {  

int reply;  
int j;  
String m_sfilename = null;  
filename = CheckNullString(filename);  
if (filename.equals(""))  
return false;  
reply = ftp.getReplyCode();  
if (!FTPReply.isPositiveCompletion(reply)) {  
ftp.disconnect();  
System.out.println("FTP server refused connection.");  
System.exit(1);  
}  
FileInputStream is = null;  
try {  
File file_in;  
if (pathname.endsWith(File.separator)) {  
file_in = new File(pathname + filename);  
} else {  
file_in = new File(pathname + File.separator + filename);  
}  
if (file_in.length() == 0) {  
System.out.println("上传文件为空!");  
return false;  
}   
  //产生随机数最大到99   
  j = (int)(Math.random()*100);  
  m_sfilename = String.valueOf(j) + ".pdf"; // 生成的文件名  
is = new FileInputStream(file_in);  
ftp.setFileType(FTP.BINARY_FILE_TYPE);  
ftp.storeFile(m_sfilename, is);  
ftp.logout();  


} finally {  
if (is != null) {  
is.close();  
}  
}  
System.out.println("上传文件成功!");  
return true;  
}  


public boolean delete(String filename) throws IOException {  

FileInputStream is = null;  
boolean retValue = false;  
try {  
retValue = ftp.deleteFile(filename);  
ftp.logout();  
} finally {  
if (is != null) {  
is.close();  
}  
}  
return retValue;  

}  

public void close() {  
if (ftp.isConnected()) {  
try {  
ftp.disconnect();  
} catch (IOException e) {  
e.printStackTrace();  
}  
}  
}  

public static int FormatStringToInt(String p_String) {  
int intRe = 0;  
if (p_String != null) {  
if (!p_String.trim().equals("")) {  
try {  
intRe = Integer.parseInt(p_String);  
} catch (Exception ex) {  

}  
}  
}  
return intRe;  
}  

public static String CheckNullString(String p_String) {  
if (p_String == null)  
return "";  
else  
return p_String;  
}  

public boolean downfile(String pathname, String filename) {  

String outputFileName = null;  
boolean retValue = false;  
try {  
FTPFile files[] = ftp.listFiles();  
int reply = ftp.getReplyCode();  

////////////////////////////////////////////////  
if (!FTPReply.isPositiveCompletion(reply)) {  
try {  
throw new Exception("Unable to get list of files to dowload.");  
} catch (Exception e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}  
}  

/////////////////////////////////////////////////////  
if (files.length == 0) {  
System.out.println("No files are available for download.");  
}else {  
for (int i=0; i <files.length; i++) {  
System.out.println("Downloading file "+files[i].getName()+"Size:"+files[i].getSize());  
outputFileName = pathname + filename + ".pdf";  
//return outputFileName;  
File f = new File(outputFileName);  

//////////////////////////////////////////////////////  
retValue = ftp.retrieveFile(outputFileName, new FileOutputStream(f));  

if (!retValue) {  
try {  
throw new Exception ("Downloading of remote file"+files[i].getName()+" failed. ftp.retrieveFile() returned false.");  
} catch (Exception e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}  
}  

}  
}  

/////////////////////////////////////////////////////////////  
} catch (IOException e) {  
// TODO Auto-generated catch block  
e.printStackTrace();  
}  
return retValue;  
}  

}   --------------------编程问答-------------------- c
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,