在HDFS上删除某个路径下特定类型的文件,比如class类型文件,比如txt类型文件

1、先获取连接:

public class Utils {

    public static FileSystem HDFS() throws Exception{

        Configuration conf = new Configuration();
        conf.set("fs.defaultFS","hdfs://potter2:9000");
        System.setProperty("HADOOP_USER_NAME", "potter");
        FileSystem fs = FileSystem.get(conf);
        return fs;

    }
}

2、以下是主要代码

package api;

import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;
/**
 * 删除某个路径下特定类型的文件,比如class类型文件,比如txt类型文件
 * @author Administrator
 *
 */
public class Dels {

        public static final String TXT = "txt";
        @Test
        public void dels() throws Exception{
            Path path = new Path("/a");
            //获取连接
            FileSystem fs = Utils.HDFS();
            //获取HDFS上路径
            FileStatus fileStatus = fs.getFileStatus(path);

            boolean directory = fileStatus.isDirectory();
            System.out.println(directory);
            System.out.println("--------------------");
            // 根据该目录是否是文件或者文件夹进行相应的操作
            if (directory) {
                Directory(path);
            }else {
                Delete(path);
            }
        }
        public void Directory (Path path) throws Exception{
            //获取连接
            FileSystem fs = Utils.HDFS();
            //查看该目录Path目录下一级子目录和子文件的状态
            FileStatus[] listStatus = fs.listStatus(path);
            //对该目录进行遍历,寻找.txt文件
            for(FileStatus fStatus : listStatus){
                Path p = fStatus.getPath();
                System.out.println(p+"***********");
                //如果是文件,并且是以.txt结尾,则删除,否则继续遍历下一级目录
                if (fStatus.isFile()) {
                    Delete(p);
                }else{
                    Directory(p);
                }
            }
        }
        public void Delete(Path path) throws Exception{
            FileSystem fs = Utils.HDFS();
            //获取路径下文件的名称
            String name = path.getName();
            System.out.println(name);

            //判断是不是以.txt结尾
            int start = name.length() - TXT.length();
            int end = name.length();
            //就得后缀名
            String Suffix = name.substring(start,end);
            if (Suffix.equals(TXT)) {
                fs.delete(path,true);
            }
    }
}

原文地址:https://www.cnblogs.com/sangumaolu/p/8545267.html

时间: 2024-10-24 10:02:18

在HDFS上删除某个路径下特定类型的文件,比如class类型文件,比如txt类型文件的相关文章

删除指定路径下固定格式,以.log结尾、三天前的文件,或删除空的日志文件

师出‘百测’besttest 删除指定路径下固定格式,以.log结尾.三天前的文件,或删除空的日志文件. 日志文件格式:XXXX_2019-01-01.log. import os,datetime #判断文件是否为空,如果为空则删除 def del_file(file): with open(file,encoding='utf-8') as f: if f.read(): pass else: f.close() os.remove(file) #查找指定路径下xx结尾的文件 def sea

删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件

1 @echo off 2 ::删除指定路径下指定天数之前(以文件的最后修改日期为准)的文件. 3 ::本例需要Win2003/Vista/Win7系统自带的forfiles命令的支持 4 rem 指定待删除文件的存放路径 5 set SrcDir=D:\ajaxtrain\web 6 rem 指定天数 7 set DaysAgo=0 8 rem 要删除的文件通配 9 set searchmast=*.html 10 set filename=D:\ajaxtrain\web\deletefil

Windows 定时删除指定路径下N天前的日志文件

Windows 下bat脚本文件的内容为 1. 删除指定路径下5天前的所有文件 . @echo off set SrcDir=E:\WORK\Git set DaysAgo=5 forfiles /p %SrcDir% /s /m *.*/d -%DaysAgo% /c "cmd /c del /f /q /a @path" 2.删除指定路径下5天前的所有log文件 @echo off set SrcDir=E:\WORK\Git //指定的路径 :5天前 set DaysAgo=5 

递归删除指定路径下的空目录

递归删除指定路径下的空目录: 注:如第一级目录要保留 vi a1.py #!/usr/bin/python import os dir="/root/python" os.chdir(dir) for f in os.listdir(dir):if os.path.isdir(f):p = open('/root/python/logs/py.log','a')p.write(os.path.join(dir,f)+"\n")p.close() g = open('

获取指定路径下特定后缀的文件

# 获取指定路径下所有指定后缀的文件# dir 指定路径# ext 指定后缀,链表&不需要带点 或者不指定.例子:['xml', 'java']import osdef GetFileFromThisRootDir(dir,ext = None): allfiles = [] needExtFilter = (ext != None) for root,dirs,files in os.walk(dir): for filespath in files: filepath = os.path.j

Java版本的删除指定目录下名叫“xxx.txt”文件名的文件

以前写过一个python版本的,但是在查找文件路径的时候出现错误,无法正确的获取到文件的路径,就造成无法删除该路径下的“xxx.txt”文件. 当时以为是windows版本系统的错误造成这个问题的,也就没有继续深究,就把这个bug给放过了. 最近一段时间在学习android,肯定要用的java了,就用java实现了下,思路的话,肯定还是以前的了,结果还是出错,后来仔细的看了看代码,其实是自己的bug. 把代码贴下:(主要功能,删除指定目录下名叫"pylist.txt"的所有文件,使用递

shell脚本监控Flume输出到HDFS上文件合法性

在使用flume中发现由于网络.HDFS等其它原因,使得经过Flume收集到HDFS上得日志有一些异常,表现为: 1.有未关闭的文件:以tmp(默认)结尾的文件.加入存到HDFS上得文件应该是gz压缩文件,以tmp为结尾的文件就无法使用: 2.有大小为0的文件,比如gz压缩文件大小为0,我们单独拿下这个文件解压发现是无限循环压缩的...这个也不能直接用来跑mapreduce 目前发现上述两种情况,其它还暂未发现.至于出现上述情况还没明确原因,且这两种情况都会影响hive.MapReduce的正常

Eclipse 上传 删除 下载 分析 hdfs 上的文件

本篇讲解如何通过Eclipse 编写代码去操作分析hdfs 上的文件. 1.在eclipse 下新建Map/Reduce Project项目.如图:  项目建好后,会默认加载一系列相应的jar包. 下面还有很多包. 2.我们新建Java 类就可以了.代码如下: package org.hadoop.examples; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOExcep

删除某一路径下所有文件

想删除某一路径之下所有文件: 删除文件,Insus.NET 写了2个方法,名称一样,重载而已. 原理简单,即是循环指定路径下所有目录和子目录来进行删除文件.重载的方法,带多一个参数.是想删除几天前的文件,根扰文件的创建日期来判断. 代码高亮的一行,Insus.NET是想这个数据不管使用这个方法,输入一个正数或是负数均可.最终处理为一个负数. 写到这里,你还可以限制不能输入0值. public static void DeleteAllFiles(string physicalPath) { Di