1.流的分类
流的方向:
输入流:读的功能
输出流:写的功能
操作的数据单位:
字节流:适合范围更加广,任意类型文件都可以用
字符流:效率高,知识和操作文本
功能:
节点流:直接接触数据源里的流
处理流:直接接触的是其他流,目的是提高效率,让操作更加灵活
任何一种流都可以用这三种分类来分
file可以表示文件,也可以表示文件夹
file对象只能操作文件,无法操作里面的内容
内容由 流 操作
2.file的一些操作
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// File 可以表示文件, 也可以表示文件夹
// 想要在哪里创建一个名字为什么的文件
File file = new File("C:\\Users\\18434\\Desktop\\a");
File file2 = new File("C:\\Users\\18434\\Desktop", "hahahah.txt");
System.out.println(file2);
// \\ 路径分隔符 File.separator 根据操作系统对应的路径分隔符
File parent = new File("C:" + File.separator + "Users" + File.separator + "18434/Desktop");
File file3 = new File(parent, "xi\\ha\\he");
System.out.println(file3);
// file 只是表示路径,文件不一定存在
if (!file.exists()) {// exists 判断文件是否真的存在
// 不存在则想要创建一个文件
boolean b = file.createNewFile();
System.out.println(b);
}
// 创建文件夹
file3.mkdirs();// mkdirs 创建多级目录
}
}
import java.io.File;
import java.io.IOException;
public class Test2 {
public static void main(String[] args) throws IOException {
// C:\\Desktop 绝对路径
// 相对路径 工程
File file = new File("a.txt");
file.createNewFile();
System.out.println("得到文件的名字"+file.getName());
System.out.println("相对路径:"+file.getPath());
System.out.println("绝对路径:"+file.getAbsolutePath());
System.out.println("得到父级目录String"+file.getParent());
System.out.println("得到父级目录File"+file.getParentFile());
System.out.println("文件是否可读"+file.canRead());
System.out.println("文件是否可写"+file.canWrite());
System.out.println("文件是否是隐藏文件"+file.isHidden());
System.out.println("判断是否是文件夹"+file.isDirectory());
System.out.println("判断是否是文件"+file.isFile());
// 此方法不能对文件夹起作用
System.out.println("文件内容长度"+file.length());
//文件名字重命名
File file2 = new File("b.txt");
boolean b2 = file.renameTo(file2);
System.out.println(b2);
// 以后如果还要操作b.txt ,则必须用file2 因为file代表的a.txt不存在了
file2.delete();
// 删除操作和重命名操作 操作的文件如果被使用着则操作失败
}
}
3.递归:隐式循环
遍历整个文件夹中所有的文件
递归:存在的风险:可能会出现StackOverflowError 栈内存溢出
设置出口 合理的控制 则不会出现StackOverflowError
递归: 遍历整个文件夹中所有的文件
import java.io.File;
public class Test3 {
public static void main(String[] args) {
File file = new File("C:\\Users\\18434\\Desktop\\资料");
String[] list = file.list();
for (String string : list) {
System.out.println(string);
}
File[] listFiles = file.listFiles();
for (File file2 : listFiles) {
System.out.println(file2);
}
a();
}
//StackOverflowError 栈内存溢出
// 方法执行是在栈中执行
static int num = 0;
public static void a(){
System.out.println(" this is a a()");
num++;
if(num==5){
return;
}
a();// 自己调用自己
}
}
import java.io.File;
public class Test4 {
public static void main(String[] args) {
File file = new File("C:\\Users\\18434\\Desktop\\资料");
findAllFile(file);
}
public static void findAllFile(File file){
if(file!=null){
if(file.isDirectory()){//判断是不是文件夹
// 查找文件夹下一层级所有内容
File[] files = file.listFiles();
for (File file2 : files) {
findAllFile(file2);// 调用findAllFile 帮判断是文件还是文件夹
}
}else{
System.out.println("是文件:"+file);
}
}else {
System.out.println("没有办法找");
}
}
}