java基於函數作爲參數的文本工具類

日常開發中經常碰到一些需要對文件處理的需求。一般有可能是過濾、解析裏邊指定字段然後存儲在指定的集合結構中;又或者是對每行數據做一些操作。這些東西常常是大同小異。因此嘗試封裝了一個簡單的工具類,用於減少重複代碼,只寫自己的業務邏輯。

import org.apache.commons.lang3.ArrayUtils;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by 51771 on 2019/5/21.
 */
public class FileUtil {
    /*
    解析一行數據中指定字段存儲到map中
     */
    public interface Str2Map<T extends Map<String,String>,S extends String> {
         void run(T map,S str);
    }
    /*
    解析一行數據中指定字段存儲到list中
     */
    public interface Str2List<T extends List<String>,S extends String> {
        void run(T map,S str);
    }
    /*
    解析一行數據,運行給定的方法
     */
    public interface Str2run<S extends String> {
        void run(S str);
    }
    /*
    按行讀取文件存儲成map,調用用戶實現的Str2Map.run方法
     */
   public static Map<String,String> file2Map(String filePath,Str2Map<Map<String,String>,String> str2Map) {
       Map<String, String> ret = new HashMap<>();
       try {
           Files.lines(Paths.get(filePath))
                   .filter(line -> !"".equals(line.trim()))
                   .forEach(line -> {
                       str2Map.run(ret, line);
                   });
       } catch (IOException e) {
           System.out.printf("讀取[%s]存儲爲map時報錯\n",filePath);
           e.printStackTrace();
       }
       return ret;
   }
    /*
    按行讀取文件存儲成list,調用用戶實現的Str2List.run方法
     */
    public static List<String> file2List(String filePath,Str2List<List<String>,String> str2List) {
        List<String> ret = new ArrayList<>();
        try {
            Files.lines(Paths.get(filePath))
                    .filter(line -> !"".equals(line))
                    .forEach(line -> {
                        str2List.run(ret, line);
                    });
        } catch (IOException e) {
            System.out.printf("讀取[%s]存儲爲list時報錯\n",filePath);
            e.printStackTrace();
        }
        return ret;
    }

    /*
    按行讀取文件,運行指定的方法
     */
    public static List<String> file2run(String filePath,Str2run<String> str2run) {
        List<String> ret = new ArrayList<>();
        try {
            Files.lines(Paths.get(filePath))
                    .filter(line -> !"".equals(line))
                    .forEach(line -> {
                        str2run.run(line);
                    });
        } catch (IOException e) {
            System.out.printf("讀取[%s]存儲爲list時報錯\n",filePath);
            e.printStackTrace();
        }
        return ret;
    }

    public static void main(String[] args) {
        //讀取文件存儲成map演示示例
        List<String> test1 = file2List("E:\\domainName.txt",
            (List<String> list, String line) -> list.add(line.trim()));
        System.out.println(ArrayUtils.toString(test1));
        //讀取文件存儲成list演示示例
        Map<String,String> test2 = file2Map("E:\\provinceCode.txt"
                , (Map<String, String> map, String line) -> {
                    String[] lineArr = line.split("\t");
                    if (lineArr.length == 2) {
                        map.put(lineArr[0], lineArr[1]);
                    }
                }
        );
        System.out.println(ArrayUtils.toString(test2));
        //運行給定方法演示
        file2run("E:\\domainName.txt",
                (String line) -> System.out.println(line));
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章