java.nio.file读写文件
2020-08-14 本文已影响0人
xiaogp
摘要: 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<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;
}
- Files.lines收集为
Map
,返回类型是java.util.HashMap
。
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;
}
- Files.lines收集为
Set
,返回类型是java.util.HashSet
。
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();
}
}