java基础笔记(11)流分类,file,递归

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("没有办法找");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/Echoxxxxx/article/details/112555277