根据一个含有服务器文件夹地址下载文件夹下的所有文件(其实需要知道所有文件名)

    项目需要根据一个URL里含有的服务器文件夹地址来下载所有文件夹下的所有文件,我暂时无法根据文件夹路径来获取文件名,报null空指针异常,所以需要在URL里含有所有文件名,或者服务器端写一个根据这个URL来返回所有文件的controller,所以是这样的,根据服务器文件的地址,我们可以用htpp流来下载文件,我们需要获取文件名,没办法,我们只能跟服务器端商量,需要一个controller来获取文件名,

下面是一个标准的根据服务器上文件名的地址来下载的类

public static void main(String[] args)
{
    String photoUrl = "http://localhost:8080/bls_ads/upload/01/A3/190000/0001/db.xml";
    String fileName = photoUrl.substring(photoUrl.lastIndexOf("/"));
    System.out.println("fileName---->"+fileName);
    String filePath = "d:";
    File file = getFile(photoUrl, filePath + fileName,"GET");
    System.out.println("Run ok!/n<BR>Get URL file " + file);

}

public static File getFile(String url,String filePath,String method){
    //System.out.println("fileName---->"+filePath);
    //创建不同的文件夹目录
    File file=new File(filePath);
    //判断文件夹是否存在
    if (!file.exists())
    {
        //如果文件夹不存在,则创建新的的文件夹
        //file.mkdirs();
        //如果文件不存在,则创建新的的文件
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    FileOutputStream fileOut = null;
    HttpURLConnection conn = null;
    InputStream inputStream = null;
    try
    {
        // 建立链接
        URL httpUrl=new URL(url);
        conn=(HttpURLConnection) httpUrl.openConnection();
        //以Post方式提交表单,默认get方式
        conn.setRequestMethod(method);
        conn.setDoInput(true);
        conn.setDoOutput(true);
        // post方式不能使用缓存
        conn.setUseCaches(false);
        //连接指定的资源
        conn.connect();
        //获取网络输入流
        inputStream=conn.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(inputStream);
        //判断文件的保存路径后面是否以/结尾
        if (!filePath.endsWith("/")) {

            filePath += "/";

        }
        System.out.println(filePath);
        //写入到文件(注意文件保存路径的后面一定要加上文件的名称)
        //fileOut = new FileOutputStream(filePath+"db.xml");
        //写入到文件(已经加了文件名)
        fileOut = new FileOutputStream(filePath);
        BufferedOutputStream bos = new BufferedOutputStream(fileOut);

        byte[] buf = new byte[4096];
        int length = bis.read(buf);
        //保存文件
        while(length != -1)
        {
            bos.write(buf, 0, length);
            length = bis.read(buf);
        }
        bos.close();
        bis.close();
        conn.disconnect();
    } catch (Exception e)
    {
        e.printStackTrace();
        System.out.println("抛出异常!!");
    }

    return file;

}


然后是一个获取所有文件名的controller





//根据路径获取文件名
    @RequestMapping("/getFileByPath")
    @ResponseBody
    public List<String> getFileByPath() {
        String path="http://10.0.201.46:8080/upload/01/A3/190000/0001/";
        String pathurl=path.substring(path.indexOf("upload/"));
        System.out.println(pathurl);
        String classpath = this.getClass().getResource("/").getPath().replaceFirst("/", "");
        String docRoot = classpath.replaceAll("WEB-INF/classes/", pathurl);
        System.out.println(docRoot);
        System.out.println(classpath);
        List<String> list=new ArrayList<String>();
        File file = new File(docRoot);
        File[] files = file.listFiles();
        System.out.println(files.length);
        for(File a:files){
            if(!a.isDirectory()){
//                System.out.println(a.getAbsolutePath());
                System.out.println(a.getName());
                list.add(a.getName());
//                System.out.println(a.getPath());
           }
        }
        return list;
    }


所以基本上需要俩个,一个是从服务器下载文件,一个是根据文件夹获取文件,这样才可以给一个服务器文件夹地址来下载,

我这个是满足了需求,但是我希望能有更好的根据服务器上文件夹的地址来获取文件名,希望有大佬能提供更好的解决方案.


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值