一直想写一个从客户端连接至FTP服务器下载某文件的程序.现在输出文件内容可以了,但是实现下载...受困了:(
我的思路是将该FTP上欲下载的文件长度读出,再写到本地磁盘.
import java.net.*;
import java.io.*;
class ftp_ex{
public static void main(String[] args){
try{
byte[] data=new byte[1024];
URL url=new URL("ftp://aaa:[email protected]/a/b.txt");
InputStream urlc=url.openStream();
URLConnection uc=url.openConnection();
int contentLength=uc.getContentLength();
System.out.println("contentLength="+contentLength);
String filename=url.getFile();
filename=filename.substring(filename.lastIndexOf('/'));
System.out.println("文件名="+filename);
FileOutputStream fout=new FileOutputStream(filename);
fout.write(data);
fout.flush();
fout.close();
urlc.close();
}
catch(Exception e){
System.err.println("err!");
}
}
}
本想采用这种类似从网页上下载文件的方法来获取FTP文件的长度的方法,但这里contentLength的值输出却为-1,导致后面的write(data)不知道该怎么来实现了:(
两点请求帮助:1是如何获取FTP文件的长度?2是如果我的思路有错,应采用何种思路来正确获取FTP服务器上的某文件?
我的思路是将该FTP上欲下载的文件长度读出,再写到本地磁盘.
import java.net.*;
import java.io.*;
class ftp_ex{
public static void main(String[] args){
try{
byte[] data=new byte[1024];
URL url=new URL("ftp://aaa:[email protected]/a/b.txt");
InputStream urlc=url.openStream();
URLConnection uc=url.openConnection();
int contentLength=uc.getContentLength();
System.out.println("contentLength="+contentLength);
String filename=url.getFile();
filename=filename.substring(filename.lastIndexOf('/'));
System.out.println("文件名="+filename);
FileOutputStream fout=new FileOutputStream(filename);
fout.write(data);
fout.flush();
fout.close();
urlc.close();
}
catch(Exception e){
System.err.println("err!");
}
}
}
本想采用这种类似从网页上下载文件的方法来获取FTP文件的长度的方法,但这里contentLength的值输出却为-1,导致后面的write(data)不知道该怎么来实现了:(
两点请求帮助:1是如何获取FTP文件的长度?2是如果我的思路有错,应采用何种思路来正确获取FTP服务器上的某文件?
解决方案 »
- 继承的题目,觉得这个题目出错了......应该只有一个正确答案啊!
- SQLServer - 数据库连接问题?请大虾们指点一下
- 如何更改tomcat的主页为我自己的huml页面,在网上查阅的所有方法都失过了
- jTree保存select和expand状态的例子,我从国外网上下的,可是,还是不能用,我实在看不懂,大家帮我看吧!
- 为何此程序编译出错了?
- 超级菜鸟求救。。估计是关于环境变量问题的。
- 请问哪里有用JAVA实现语音聊天的例子或代码参考?
- 谁用过CacheRowSet这个类,能给我提供一些使用帮助吗?
- 我的电脑好象感染病毒了,多了很多名字是folder.htt的文件,请问怎么办?
- 一个初涉者之?????... ...,请各位兄弟姐妹点拔。:)
- 跪求答案,请问哪个大哥大姐能帮我做个题目,用JAVA编程,再过3天就要考的,谢谢啊~~
- 这个问题怎么解决
D:\Documents and Settings>ftp
ftp> open 192.168.1.122
Connected to 192.168.1.122.
220 thserveradmin Microsoft FTP Service (Version 5.0).
User (192.168.1.122:(none)): administrator
331 Password required for administrator.
Password:
230 User administrator logged in.
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
bea8
complet.rar
epson
226 Transfer complete.
ftp: 收到 671 字节,用时 0.07Seconds 9.59Kbytes/sec.
ftp> get complet.rar
200 PORT command successful.
150 Opening ASCII mode data connection for complet.rar(37991 bytes).
226 Transfer complete.
ftp: 收到 37991 字节,用时 0.04Seconds 949.77Kbytes/sec.
ftp> bye
221你就模拟命令行就完事了
D:\Documents and Settings>
谢谢hellwindy的思路及sunggwei(sun)提供的下载地址:)
import java.io.*;
import sun.net.*;
import sun.net.ftp.*;
class ftp_ex4{
public static void main(String[] args){
String server="192.168.1.27";
String user="aaa";
String password="aaa123";
String path="/a";
String filename="ex1.txt";
try{
FtpClient ftpClient=new FtpClient();
ftpClient.openServer(server);
ftpClient.login(user,password);
System.out.println("path.length="+path.length());
if(path.length()!=0)
ftpClient.cd(path);
ftpClient.binary();
TelnetInputStream is=ftpClient.get(filename);
File file_out=new File(filename);
FileOutputStream os=new FileOutputStream(file_out);
byte[] bytes=new byte[1024];
int c;
while((c=is.read(bytes))!=-1){
os.write(bytes,0,c);
}
is.close();
os.close();
ftpClient.closeServer();
}
catch(IOException e){
System.err.println("err");
}
}
}
while((c=is.read(bytes))!=-1){
os.write(bytes,0,c);
}
来实现.