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