定时从目录中获取txt文件并对文件中的数据进行处理

背景

主要实现以下功能:从指定目录下获取所有txt文件并读取其中的手机号,拼装成字符串,处理失败的数据存回原来的目录。

1. 获得目录下所有txt文件的路径

 public List getFileList(String dirPath){
 		//dirPath是由配置文件导入的文件夹所在路径
        File file = new File(dirPath);
        List result = new ArrayList();
        //file是文件夹且不为空
        if(file.isDirectory() && file.list().length > 0){
            //获得文件夹里的所有txt文件
            File[] dirList = file.listFiles(new FileFilter() {
                        @Override
                        public boolean accept(File file1) {
                            if(file1.isFile() && file1.getName().indexOf("txt") > -1){
                                return true;
                            }else{
                                return false;
                            }
                        }
                    }
            );
            for(int i = 0; i < dirList.length; i++){
                result.add(dirList[i].getPath());
            }
        }
        return result;
    }

2. 从txt文件中读取手机号

 public String txt2String(File file){
        StringBuilder sb = new StringBuilder();
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String s = null;
            //项目中每一个file里都是按行分布的手机号,这里将手机号取出并以逗号间隔组成字符串
            while((s = br.readLine()) != null){
                sb.append(s + ",");
            }
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.toString().substring(0, sb.length() - 1);
    }

3. 根据路径创建文件

	//创建txt文件
    public void createFile(String filepath){
        File file = new File(filepath);
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

4. 主方法

小工具使用springboot写成,并使用了@EnableScheduling注解完成定时任务,此处不多赘述。

@Scheduled(cron = "${cronTimer}")
@PostConstruct
public void method(){
		//得到由txt文件路径组成的list
        List list = getFileList(dirPath);
        String str = null;
        String res = null;
        if(list.size() <= 0){
            return;
        }else{
            for(int i = 0; i < list.size(); i++){
                //循环获得每个txt文件,并将每个txt文件中的手机号取出并以逗号间隔组成字符串
                File file = new File(String.valueOf(list.get(i)));
                if(!file.exists()){
                    continue;
                }
                str = txt2String(file);
                String[] num = str.split(",");
                //failNum用来存储后续处理失败的数据
                List<String> failedNum = new ArrayList<>();
                for(int j = 0; j < num.length; j++){
                    try {
                    	//对取出的数据进行处理
                        ******
                        if(!result){
                            failedNum.add(num[j]);
                        }
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }
                if(failedNum.size() > 0){
                    try {
                        FileWriter fileWriter = new FileWriter(file);
                        fileWriter.write("");
                        fileWriter.flush();                           
                        StringBuilder stringBuilder = new StringBuilder();
                        for(int k = 0; k < failedNum.size(); k++){
                            stringBuilder.append(failedNum.get(k));
                            if(k != failedNum.size() - 1){
                                stringBuilder.append(System.getProperty("line.separator"));
                            }
                        }
                        fileWriter.write(stringBuilder.toString());
                        fileWriter.close();
                        //处理失败的数据存回原来的目录,并将目录重命名留待后续处理                                                                                                                                                    
                        if(!file.getName().contains("_failed_")){
                            file.renameTo(new File(file.getParent() + System.getProperty("file.separator") + "_failed_" + file.getName()));
                        }

                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }else{
					return;
	            }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值