900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > java nio 追加写文件_java.nio.file读写文件

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

时间:2020-01-13 15:05:32

相关推荐

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

摘要: 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();

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。