Java学习

java.nio.file读写文件

2020-08-14  本文已影响0人  xiaogp

摘要: Files.linesFiles.readAllLinesFiles.writePaths.getstreamFiles.existsFiles.deleteStandardOpenOption

Files.lines

Files.lines返回stream,stream可以进一步collect收集为List,Map,Set,String,文件的每一行是一个元素。

public static String readString() {
        String res = null;
        try {
            res = Files.lines(Paths.get("./etc/batchNoFile.txt")).collect(Collectors.joining());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }
public static List<String> readList() {
        List<String> res = null;
        try {
            res = Files.lines(Paths.get("./etc/batchNoFile.txt")).collect(Collectors.toList());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }
public static Map<String, String> readMap() {
        Map<String, String> res = null;
        try {
            res = Files.lines(Paths.get("./etc/batchNoFile.txt")).collect(Collectors.toMap(k -> k.split(",")[0], v -> v.split(",")[1], (o, n) -> n));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

还有其他写法,通过forEach遍历实现

public static Map<String, String> readMap2() {
        try {
            Map<String, String> res = new HashMap<>();
            Files.lines(Paths.get("./etc/batchNoFile.txt")).forEach(
                    x -> {
                        String[] pair = x.split(",");
                        res.put(pair[0], pair[1]);
                    }
            );
            return res;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

forEach实现每一行元素计数。

public static Map<String, Integer> readMap3() {
        try {
            Map<String, Integer> res = new HashMap<>();
            Files.lines(Paths.get("./etc/batchNoFile.txt")).forEach(
                    x -> {
                        res.put(x, res.getOrDefault(x, 0) + 1);
                    }
            );
            return res;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

也可以直接收集实现

public static Map<String, Integer> readMap4() {
        Map<String, Integer> res = null;
        try {
            // 如果使用++,是++o,++o先+1再赋值,o++先赋值再+1,结果全是1
            res = Files.lines(Paths.get("./etc/batchNoFile.txt")).collect(Collectors.toMap(k -> k, v -> 1, (o, n) -> o + 1));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }
public static Set<String> readSet() {
        Set<String> res = null;
        try{
            res = Files.lines(Paths.get("./etc/batchNoFile.txt")).collect(Collectors.toSet());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return res;
    }

Files.readAllLines

Files.readAllLines返回java.util.ArrayList,每一行是一个元素。

public static List<String> readList2() {
        List<String> res = null;
        try {
            res = Files.readAllLines(Paths.get("./etc/batchNoFile.txt"));
        } catch (Exception e) {
            LOGGER.error("读取批次数据出错", e);
        }
        return res;
    }

Files.write

主要实现覆盖写入,追加且换行写入,直接写入集合

覆盖写入

简单的写入一条数据。

public static void writeBatchNo(String batchNo) {
        try {
            Files.write(Paths.get(Config.getString("batchno.file")), batchNo.getBytes(StandardCharsets.UTF_8));
        } catch (Exception e) {
            LOGGER.error("写入批次数据出错", e);
        }
    }
覆盖追加写入

覆盖原文件,追加写入多条数据,如果不先删除会直接在原文件上追加。

public static void writeMap(Map<String, String> data) {
        try {
            Path path = Paths.get("./etc/batchNoFile.txt");
            // 如果存在先删除
            if (Files.exists(path)) {
                Files.delete(path);
            }
            for (Map.Entry<String, String> entry : data.entrySet()) {
                String line = String.format("%s,%s\n", entry.getKey(), entry.getValue());
                Files.write(Paths.get("./etc/batchNoFile.txt"), line.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
直接写入集合

直接写入List,Set集合,每个元素自动换行。

public static void writeList(Collection<String> data) {
        try {
            Path path = Paths.get("./etc/batchNoFile.txt");
            // 如果存在先删除
            if (Files.exists(path)) {
                Files.delete(path);
            }
            Files.write(path, data, StandardCharsets.UTF_8,
                    StandardOpenOption.CREATE, StandardOpenOption.APPEND);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读