流:是一种有序的数据的结合,有数据源和数据目的地
主要分为三种:
- 按照流的方向:输入流(只能读取,不能输入),输出流(只能写入,不能读取)
- 按照流的操作单元:字节流(计算机识别的这种,011110101)、字符流(人能认识的,字符串)
3. 按照角色:节点流,处理流
字节 字符的区别:
1.读写的单位不同:字节流是以字节为单位,一个字节占8个bit位
2.操作对象不一样:字节流可以处理任何类型的数据 字符流只能处理相关的数据类型
字节字符的转换:引入了字符编码表,建立字符和字节的映射关系
(ASCII)借助于一个字节储存数据,一个字节的7个bit位
(GBK) 借助两个字节储存,处理中文的
(utf-8)对Unicode(两个字节)的优化,一个字节(但它还有一个字节头,所以实际大于一个字节)
文件类:File类
java.io.File类不属于Java流系统,但它是文件流进行文件操作的辅助类,主要用于操作文件及文件目录,包括删除、重命名文件或目录、查询文件的属性、创建子目录、列出目录下的文件等:
输出目录中的所有文件:
public class AQ {
public static void main(String[] args) {
File file = new File("D:\\src/java");
print1(file);
}
public static void print1(File file) {
String[] list = file.list();
for(int i = 0;i < list.length;i++) {
System.out.println(list[i]);
}
System.out.println("--------------");
File[] file1 = file.listFiles();
for(int i = 0;i < file1.length;i++) {
System.out.println(file1[i]);
}
}
}
运行结果:
io
lang
math
net
nio
rmi
security
sql
text
util
--------------
D:\src\java\applet
D:\src\java\awt
D:\src\java\beans
D:\src\java\io
D:\src\java\lang
D:\src\java\math
D:\src\java\net
D:\src\java\nio
D:\src\java\rmi
D:\src\java\security
D:\src\java\sql
D:\src\java\text
D:\src\java\util
可以看出,list()方法只返回文件名,而 listFiles()方法不但返回文件名,还返回路径,后者更详细,
给定一个目录,要求列出此目录下的所有文件和目录:
分析:给定的目录可能包含子目录,所以需要递归,如果是文件则直接打印其名称,若是目录,则需要递归调用遍历方法:
public class AQ {
public static void main(String[] args) {
File file = new File("D:\\src/java/nio");
fileList(file);
}
public static void fileList(File file) {
if(file.isFile()) { //如果是文件直接打印
System.out.println(file.getName());
}else if(file.isDirectory()) { //如果是目录,则需要遍历
System.out.println(file.getPath()+"是目录");
File[] fileName = file.listFiles(); //获取目录中的所有文件和目录
for(int i = 0;i < fileName.length;i++) {
fileList(fileName[i]); //递归调用
}
}
}
}
运行结果: