hadoop FileSystem 重写 Progress 方法获取文件上传总进度

话不多说先上代码:

   /**  
     * File对象上传到hdfs
     */    
    public synchronized static void createFile(File localPath, String hdfsPath) throws IOException {    
        InputStream in = null;    
        try {
            Configuration conf = new Configuration();    
            FileSystem fileSystem = FileSystem.get(URI.create(hdfsPath), conf);
        	final float fileSize = localPath.length()/65536;            
            FSDataOutputStream out = fileSystem.create(new Path(hdfsPath), new Progressable() {
            	long fileCount = 0;
                @Override
                public void progress() {
                    fileCount ++;
                    System.out.println("总进度:" + (fileCount/fileSize)*100 + " %");                	
                }
            }); 
            in = new BufferedInputStream(new FileInputStream(localPath)); 
            IOUtils.copyBytes(in, out, 4096, false); 
            out.sync();    
            out.close();    
            System.out.println("create file in hdfs: " + hdfsPath);    
        } finally {    
            IOUtils.closeStream(in);    
        }    
    }

重写的 progress 方法在每次上传了64KB字节大小的文件之后会自动调用一次,通过累加之后的结果与整个文件大小来计算总上传文件的进度,这里需要注意的是,因为 progress 方法是卸载一个闭包内的,所以他只能调用闭包内的局部变量或者是闭包外的 final 变量。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值