欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题

程序员文章站 2024-03-12 21:41:44
废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadtoftp(string url,i...

废话不多说了,直接给大家贴代码了,具体代码如下所示:

//文件上传
public static boolean uploadtoftp(string url,int port,string username,string password,string path,string filename,inputstream input)
{
  boolean success=false;
  ftpclient ftp=new ftpclient();//org.apache.commons.net.ftp
  try{
    if(port>-1)
    {
      ftp.connect(url,port);  
    }else{
      ftp.connect(url);//ftp默认的端口是21
    }
    //很多人写的是用ftp.getreplycode()给获取连接的返回值,但是这样会导致storefilestream返回null
    if(ftp.login(username,password))
    {
      ftp.enterlocalactivemode();
      ftp.setfiletype(ftpclient.binary_file_type);
      //创建目录,如果存在会返回失败
      ftp.makedirectory(path);
      //切换目录
      ftp.changeworkingdirectory(path);
      //上传文件 
      //ftp协议规定文件编码格式为iso-8859-1
      filename=new string(filename.getbytes("gbk"),"iso-8859-1");
      outputstream out=ftp.storefilestream(filename);
      byte[]bytearray=new byte[4096];
      int read=0;
      while((read=input.read(bytearray))!=-1)
      {
        out.write(bytearray,0,read);
      }
      out.close();
      ftp.logout();
      sucess=true;
    }  
  }
  catch(exception e)
  {
    
  }
  finally{
     if(ftp.isconnected())
     {
       ftp.disconnecct(); 
     }
  }
}
//文件下载
public static boolean downloadfromftp(string url,int port,string username,string password,string path,string localpath)
{
  boolean success=false;
  ftpclient ftp=new ftpclient();//org.apache.commons.net.ftp
  try{
    int reply;
    if(port>-1)
    {
      ftp.connect(url,port);  
    }else{
      ftp.connect(url);//ftp默认的端口是21
    }
    //很多人写的是用ftp.getreplycode()给获取连接的返回值,但是这样会导致storefilestream返回null
    ftp.login(username,password)
     
      ftp.enterlocalactivemode();
      ftp.setfiletype(ftpclient.binary_file_type);
      reply=ftp.getreplycode();
      if(!ftpreply.ispositioncompletion(reply))
      {
        ftp.disconnect();
        return success;s
      } 
      //切换目录 此处可以判断,切换失败就说明ftp上面没有这个路径
      ftp.changeworkingdirectory(path);
      //上传文件 
      ftpfile[]fs=ftp.listfiles();
      outputstream out=null;
      inputstream in=null;
      for(int i=0;i<fs.length;i++)
      {
        ftpfile ff=fs[i];
        string outfilename=ff.getname();
        //创建本地的文件时候要把编码格式转回来
        string localfilename=new string(ff.getname().getbytes("iso-8859-"),"gbk");
        file localfile=new file(localpath+lcoalfilename);
        out=new fileoutputstream(localfile);
        in=ftp.retrievefilestream(outfilename); 
        byte[]bytearray=new byte[4096];
        int read=0;
      while((read=in.read(bytearray))!=-1)
      {
        out.write(bytearray,0,read);
      }
      //这句很重要 要多次操作这个ftp的流的通道,要等他的每次命令完成
      ftp.completependingcommand();
      out.flush();
      out.close();
      ftp.logout();
      sucess=true;
  }
  catch(exception e)
  {
    
  }
  finally{
     if(ftp.isconnected())
     {
       ftp.disconnecct(); 
     }
  }
}

以上所述是小编给大家介绍的java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题,希望对大家有所帮助