java nio 追加写文件_java.nio.file读写文件

本文详细介绍了Java NIO的Files.lines方法用于读取文件,展示了将其收集为String、List、Map和Set的各种方式,并讨论了Files.readAllLines和Files.write方法的用法,包括覆盖写入、追加写入和直接写入集合等操作。
摘要由CSDN通过智能技术生成

摘要: Files.lines, Files.readAllLines, Files.write, Paths.get , stream, Files.exists, Files.delete, StandardOpenOption

Files.lines

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

Files.lines收集为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;

}

Files.lines收集为List,返回类型是java.util.ArrayList。

public static List readList() {

List res = null;

try {

res = Files.lines(Paths.get("./etc/batchNoFile.txt")).collect(Collectors.toList());

} catch (Exception e) {

e.printStackTrace();

}

return res;

}

Files.lines收集为Map,返回类型是java.util.HashMap。

public static Map readMap() {

Map 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 readMap2() {

try {

Map 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 readMap3() {

try {

Map 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 readMap4() {

Map 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;

}

Files.lines收集为Set,返回类型是java.util.HashSet。

public static Set readSet() {

Set 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 readList2() {

List 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 data) {

try {

Path path = Paths.get("./etc/batchNoFile.txt");

// 如果存在先删除

if (Files.exists(path)) {

Files.delete(path);

}

for (Map.Entry 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 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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值