Stream流
专业用于对集合或者数组进行便捷操作的
下面是代码体现Stream流的便捷性
int count = 0;
for (int number : numbers) {
if (number % 2 == 0) {
count++;
}
}
System.out.println("偶数的个数为:" + count);
//Stream流
long count = numbers.stream()
.filter(number -> number % 2 == 0)
.count();
System.out.println("偶数的个数为:" + count);
Stream流的创建
// 1、如何获取List集合的Stream流?
Stream<String> stream = names.stream();
// 2、如何获取Set集合的Stream流?
Stream<String> stream1 = set.stream();
// 3、如何获取Map集合的Stream流?
Stream<String> ks = keys.stream();
// 4、如何获取数组的Stream流?
Stream<String> s1 = Arrays.stream(names2);
Stream<String> s2 = Stream.of(names2);
Stream流的中间方法
中间方法指的是:调用完方法之后其结果是一个新的Stream流,于是可以继续调用方法,这样一来就可以支持链式编程(或者叫流式编程)。
Stream.filter()//对流中的数据进行过滤
sorted()//对元素进行升序排序
limit()//获取前几个元素
skip()//跳过前几个元素
Stream流终结方法
foreach() //遍历方法;
count() //计算方法;
max和min //最大和最小
File类
File类创建对象
需求我们注意的是:路径中"\"要写成"\\", 路径中"/"可以直接用
File f1 = new File("D:/resource/ab.txt")
File类的方法
// 1.创建文件对象,指代某个文件
File f1 = new File("D:/resource/ab.txt");
//File f1 = new File("D:/resource/");
// 2、public boolean exists():判断当前文件对象,对应的文件路径是否存在,存在返回true.
System.out.println(f1.exists());
// 3、public boolean isFile() : 判断当前文件对象指代的是否是文件,是文件返回true,反之。
System.out.println(f1.isFile());
// 4、public boolean isDirectory() : 判断当前文件对象指代的是否是文件夹,是文件夹返回true,反之。
System.out.println(f1.isDirectory());
// 5.public String getName():获取文件的名称(包含后缀)
System.out.println(f1.getName());
// 6.public long length():获取文件的大小,返回字节个数
System.out.println(f1.length());
// 7.public long lastModified():获取文件的最后修改时间。
long time = f1.lastModified();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
System.out.println(sdf.format(time));
// 8.public String getPath():获取创建文件对象时,使用的路径
File f2 = new File("D:\\resource\\ab.txt");
File f3 = new File("file-io-app\\src\\itheima.txt");
System.out.println(f2.getPath());
System.out.println(f3.getPath());
// 9.public String getAbsolutePath():获取绝对路径
System.out.println(f2.getAbsolutePath());
System.out.println(f3.getAbsolutePath());
// 1、public boolean createNewFile():创建一个新文件(文件内容为空),创建成功返回true,反之。
File f1 = new File("D:/resource/itheima2.txt");
System.out.println(f1.createNewFile());
// 2、public boolean mkdir():用于创建文件夹,注意:只能创建一级文件夹
File f2 = new File("D:/resource/aaa");
System.out.println(f2.mkdir());
// 3、public boolean mkdirs():用于创建文件夹,注意:可以创建多级文件夹
File f3 = new File("D:/resource/bbb/ccc/ddd/eee/fff/ggg");
System.out.println(f3.mkdirs());
// 3、public boolean delete():删除文件,或者空文件,注意:不能删除非空文件夹。
System.out.println(f1.delete());
System.out.println(f2.delete());
File f4 = new File("D:/resource");
System.out.println(f4.delete());
1.mkdir(): 只能创建单级文件夹、
2.mkdirs(): 才能创建多级文件夹
3.delete(): 文件可以直接删除,但是文件夹只能删除空的文件夹,文件夹有内容删除不了。
遍历文件夹方法
获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回
String[] names = f1.list();
for (String name : names) {
System.out.println(name);
}
重点)获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
File[] files = f1.listFiles();
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
File f = new File("D:/resource/aaa");
File[] files1 = f.listFiles();
System.out.println(Arrays.toString(files1));
}
字符集
ASCII字符集:《美国信息交换标准代码》,包含英文字母、数字、标点符号、控制字符特点:1个字符占1个字节GBK字符集:中国人自己的字符集,兼容ASCII字符集,还包含2万多个汉字特点:1个字母占用1个字节;1个汉字占用2个字节Unicode字符集:包含世界上所有国家的文字,有三种编码方案,最常用的是UTF-8UTF-8编码方案:英文字母、数字占1个字节兼容(ASCII编码)、汉字字符占3个字节
IO流
IO流分为两大派系:
1.字节流:字节流又分为字节输入流、字节输出流
2.字符流:字符流由分为字符输入流、字符输出流
IO流资源释放
try(资源对象1; 资源对象2;){
使用资源的代码
}catch(异常类 e){
处理异常的代码
}//注意:注意到没有,这里没有释放资源的代码。它会自动是否资源
try (
// 1、创建一个字节输入流管道与源文件接通
InputStream is = new FileInputStream("文件路径");
// 2、创建一个字节输出流管道与目标文件接通。
OutputStream os = new FileOutputStream("文件路径");
){
// 3、创建一个字节数组,负责转移字节数据。
byte[] buffer = new byte[1024]; // 1KB.
// 4、从字节输入流中读取字节数据,写出去到字节输出流中。读多少写出去多少。
int len; // 记住每次读取了多少个字节。
while ((len = is.read(buffer)) != -1){
os.write(buffer, 0, len);
}
System.out.println(conn);
System.out.println("复制完成!!");
} catch (Exception e) {
e.printStackTrace();
}
字节流
输入流(读数据)、输出流(写数据)
FileInputStream读取全部字节
第一步:创建FileInputStream文件字节输入流管道,与源文件接通。
第二步:调用read()方法开始读取文件的字节数据。
第三步:调用close()方法释放资源
// 1、一次性读取完文件的全部字节到一个字节数组中去。
// 创建一个字节输入流管道与源文件接通
InputStream is = new FileInputStream("文件位置");
//2、调用方法读取所有字节,返回一个存储所有字节的字节数组。
byte[] buffer = is.readAllBytes();
System.out.println(new String(buffer));
//3、关闭流
is.close();
FileOutputStream写字节
第一步:创建FileOutputStream文件字节输出流管道,与目标文件接通。
第二步:调用wirte()方法往文件中写数据
第三步:调用close()方法释放资源
// 1、创建一个字节输出流管道与目标文件接通。
// 覆盖管道:覆盖之前的数据
// OutputStream os =
// new FileOutputStream("文件位置");
// 追加数据的管道
OutputStream os =
new FileOutputStream("文件位置", true);
// 2、开始写字节数据出去了
os.write(97); // 97就是一个字节,代表a
os.write('b'); // 'b'也是一个字节
// os.write('李'); // [ooo] 默认只能写出去一个字节
byte[] bytes = "小李子".getBytes();
os.write(bytes);
os.write(bytes, 0, 15);
// 换行符
os.write("\r\n".getBytes());
os.close(); // 关闭流
字节流复制文件
1.需要创建一个FileInputStream流与源文件接通,创建FileOutputStream与目标文件接通
2.然后创建一个数组,使用FileInputStream每次读取一个字节数组的数据,存如数组中
3.然后再使用FileOutputStream把字节数组中的有效元素,写入到目标文件中
下一篇