我做了一个ftp下载··、
想在下载前,也就是获得流之前获得ftp服务器上指定文件的大小··
不知道该怎么实现·····
请指教··谢谢····
code::public static boolean downLoadFtp(String ftpServerIp,String ftpUser,String ftpPassWord,String url,String filePath,String fileName){


try
        {
            FtpClient fc=new FtpClient(ftpServerIp);
            fc.login(ftpUser,ftpPassWord);
            fc.binary();
            int ch;
            int filesize=0;
            String fileStr = filePath + fileName;
System.out.println(fileStr);
File filename = new File(fileStr);

if(filename.exists()){
return false;
}
if (!filename.exists()) {
if (filename.createNewFile()) {
System.out.println("File   is   created   successfully!");
}
}
            RandomAccessFile getFile = new RandomAccessFile(fileStr,"rw");
          
            getFile.seek(0);
            //url="/FTPTest1.txt";
            TelnetInputStream fget=fc.get(fileName);            DataInputStream puts = new DataInputStream(fget);
            while ((ch = puts.read()) >= 0) {
             filesize   =filesize+ch;            
           
                getFile.write(ch);
            }            fget.close();
            getFile.close();
            fc.closeServer();
        }
        catch (IOException ex)
        {
System.out.println("C::   download   89    FTP ERROR!!");          
ex.printStackTrace();
        
        }
        return true;
}

解决方案 »

  1.   

    本人有一个比较笨的方法,希望帮到忙:
    注意这里是使用:sun.net.ftp的//获取文件大小
         int fileSize = -1;
         ftpclient.sendServer("SIZE "+SourceFileName+"\r\n");
         int res = ftpclient.readServerResponse();//z注意:这里的组合使用是必须得  sendServer 后到 readServerResponse 
            if(res==213){
             String msg= ftpclient.getResponseString();
             try{
             fileSize = Integer.parseInt(msg.substring(3).trim());
             }
             catch(Exception ex){;}
            }
    SourceFileName 就是在FTP服务器上的文件,例如:/top/001.txt 大小,1024b
    而调用ftpclient.getResponseString() 会返回以下信息:213 1024