文件读取、新语法
1、文件读取
1.1 扫描文件阅读器
Scanner fin = new Scanner(new FileReader("path路径"));
StringBuilder[] str;
while(fin.hasNextLine()){//如果指针当前位置还有内容
str[i] = fin.nextLine();//读取文件阅读器中的一行
}
1.2 扫描文件
Scanner fin = new Scanner(new File("path路径"));
StringBuilder[] str;
while(fin.hasNextLine()){//如果指针当前位置还有内容
str[i] = fin.nextLine();//读取文件阅读器中的一行
}
1.3 以分割字符串扫描文件
Scanner fin = new Scanner(new FileReader("path路径"));
fin.useDelimiter("www");
while(fin.hasNext()){
System.out.println(fin.next());
}
1.4 Files(java 1.8)
该方法适用于按行处理数据,不关心顺序!
速度快,但是行的顺序不确定!
【注意】流stream,前面使用了,后面就没法使用!
Stream<String> lines = Files.lines("path路径");
lines.forEach(ele->{//ele获取的每行数据
System.out.printf(ele);
});
//如果想让它有序处理文件中的各行,这两个案例不能同时运行。效率低
lines.forEachOrdered(ele->{//ele获取的每行数据
System.out.printf(ele);
});
//当文件很大的时候,利用CPU的多核处理,并行执行多行
lines.paraller().forEachOrdered(
System.out::println
);
//也可以将流转换成list集合-有序
//但是需要考虑内存是否足够,因为该方法将流stream中的所有内容全部加载到内存!可能会抛出java.lang.OutOfMemoryError
List<String> list = lines.collect(Collectors.toList());
//等效于
List<String> list1 = Files.readAllLines(Paths.get("path"),"utf8");
//在jdk11中,可以一次读入一个文件,但是不能超过2G,还要考虑jvm内存大小。
Files.readString(Paths.get("path"));
//如果没有jdk11,又想快速读取小文件。可以将所有内容以二进制的方式全部读出,转为String。
Byte[] bytes = Files.readAllBytes(Paths.get("path"));
String str = new String(bytes,StandardCharsets.UTF_8);
1.5 经典管道流的方式读取
try(BufferedReader br = new BufferedReader(new FileReader("path"))){
br.readLine();//读取到一行
}catch(Exception e){}
//jdk8中可以这样写
try(BufferedReader br = Files.newBufferedReader(Paths.get("path"))){
br.readLine();
}catch(Exception e){}
2、Java新语法
2.1 forEach 遍历Iterator
遍历流stream,所有除了map的集合!
但是可以遍历集合中的key集合或value集合!
ArrayList<Integer> arrList = new ArrayList();
arrList.add(1);
arrList.add(2);
arrList.add(3);
arrList.forEach(ele->{
System.out.println(ele);
});
2.2 ::
访问类的构造器、实例方法、静态方法。不能访问属性!
3、函数式编程-Consumer
【待学习……】