软工超越日报-Android文件下载器 5/12

向大地震中去世的同胞致敬

今天要做的是一个可以执行下载的下载器,虽然据说安卓原生有Downloadmananger这种“方便”的下载器,但我个人还是更倾向于这种比较简单不那么难操作的东西

先上servlet端代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         response.setCharacterEncoding("UTF-8");
         response.setHeader("Access-Control-Allow-Origin", "*");
         response.setContentType("text/html;charset=UTF-8");
         response.setHeader("content-type","text/html;charset=UTF-8");
         String file=new String(request.getParameter("filename").getBytes("utf-8"),"utf-8");
         File f = new File("C:\Users\14997\Desktop\nb\"+file);  
         FileInputStream  fis = new FileInputStream(f);  
        String filename=URLEncoder.encode(f.getName(),"utf-8"); 
        byte[] b = new byte[fis.available()];  
        fis.read(b);
        response.setHeader("Content-Disposition","attachment; filename="+filename+"");  
        //获取响应报文输出流对象  
        ServletOutputStream  out =response.getOutputStream();  
        //输出  
        out.write(b);  
        out.flush();  
        out.close(); 
     }

其实也是在向网页上推字节流

那么我们来写下安卓的下载:

 public int downFile(String filename) {
        InputStream inputStream = null;
        File file = new File(vs.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)+"/"+filename);
        try {
            if (file.exists()) {
                return 1;
            } else {
                file.createNewFile();
                String url = links[4]+filename;
                URL urll = new URL(url);
                HttpURLConnection urlConn = (HttpURLConnection) urll.openConnection();
                inputStream = urlConn.getInputStream();
                OutputStream output = new FileOutputStream(file);
                byte buffer [] = new byte[4 * 1024];
                while((inputStream.read(buffer)) != -1){
                    output.write(buffer);
                }
                output.flush();
                output.close();
                File resultFile = file;
                if (resultFile == null) {
                    return -1;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            file.delete();
            return -1;
        } finally {
            try {
                inputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return 0;
    }

这样就可以实现文件的下载了,只需将其放在对应的目录下即可通过该下载函数请求下载

原文地址:https://www.cnblogs.com/Sakuraba/p/14910899.html