IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> File类、递归算法、IO流 -> 正文阅读

[数据结构与算法]File类、递归算法、IO流

一、File类

类代表与平台无关的文件和目录

File? 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。

1. 构造器:

public class TestFile {
    public static void main(String[] args) {
    //路径中的\要写 \\ 还可以写 /
    //String参数的构造器
    //File file1 = new File("D:/Lession/Java2113/temp.txt");
    //File file2 = new File("D:/Lession/Java2113/a.txt");
    //File(File parent, String child) 构造器
    //File file1 = new File("D:/Lession/Java2113");
    //File file2 = new File(file1,"temp.txt");
    }
}
import java.io.File;
import java.io.IOException;

public class IOTest {
	public static void main(String[] args) {
		File f=new File("d:/huayu.txt");
		//如果文件不存在,则创建一个新文件
		if(!f.exists()) {
			try {
				f.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		//获得文件的基本信息
		System.out.println(f.getName());
		System.out.println(f.getAbsolutePath());
		System.out.println(f.length());
		//是否是普通文件或目录
		System.out.println(f.isFile());
		System.out.println(f.isDirectory());
		//删除文件
		f.delete();
	}
}

2. 常用的方法:

createNewFile : 创建一个空文件

mkdir : 创建一个文件夹(目录)

mkdirs : 创建多级文件夹

File file1 = new File("D:/Lession/Java2113/a/b/c");
//file1.mkdir();
//创建多级文件夹
file1.mkdirs();

delete : 删除文件 或 文件夹 ,文件夹为空目录时才能删除;如果要想要删除一个非空的文件夹,则可以使用递归算法来实现。

exists: 判断文件或文件夹是否存在

getPath: 获得文件的路径(封装的路径)

toString : 相当于getPath()

getAbsolutePath : 获得其绝对路径

getName : 获得文件或文件夹的名字

getParent : 获得文件目录的路径

isFile / isDirectory :判断file对象是文件还是文件夹

length:文件大小,单位是字节

listFiles : 获得当前文件夹中的所有文件和文件夹对象数组

File file = new File("D:\\Lession\\Java2113\\预热");
File[] files = file.listFiles();
for(File f:files) {
    System.out.println(f);
}

二、递归方法

1.递归recursion

? 递归的定义

若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的;若一个过程直接或间接地调用自己,则称这个过程是递归的过程

? 递归的思想

递归的基本思想就是把规模大的问题转化为规模小的多个相似的子问题来解决

?递归有两种

????????(1)直接递归:自己调用自己

(2)间接递归: A 中调用 B B 中又调用了 A

在方法中调用自身方法

public class TestDG {
    //计算n阶乘的方法
    public static int jc(int n) {
    if(n==1)
        return 1;
        return jc(n-1)*n;
    }
    public static void main(String[] args) {
        System.out.println(jc(3));
    }
}

2.递归的三要素

1). 明确递归终止条件

   递归应该有一个明确的临界点,程序一旦到达了这个临界点,就不用再继续递归调用。换句话说,该临界点就是一种简单情境,可以防止无限递归。

2). 给出递归终止时的处理办法

  在递归的临界点存在一种简单情境,在这种简单情境下,应该直接给出问题的解决方案。一般地,在这种情境下,问题的解决方案是直观的、容易的。

3). 提取重复的逻辑,缩小问题规模

   递归问题必须可以分解为若干个规模较小、与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。从程序实现的角度而言,我们需要抽象出一个干净利落的重复的逻辑,以便使用相同的方式解决子问题。

?3.递归模板

public 返回值 recursion(){
    //1.递归结束条件
    if(){
        
    }
    //2.业务代码

    //3.向下递归调用
    recursion();

    //4.清空,善后处理(不是必须)
}

实例:递归删除文件

删除非空的目录中的所有文件?

/**
	 * 删除文件,普通文件,空目录,非空目录全删除;
	 */
	public static void delete(File f) {
		//1.结束条件
		if(f.isDirectory()) {
			//查找所有子文件;
			File[] fs=f.listFiles();
			for(File file:fs) {
				//3.向下调用
				delete(file);
				
			}
		}
		//2.业务代码
		f.delete();	
	}

找到一个文件夹中所有的.java文件

public class TestFile {
    public static void main(String[] args) {
        File file = new File("D:\\Lession\\Java2113\\预热");
        delete(file);
    }
    //找到 “预热文件夹”中所有的java文件 ,存储到List集合中
    public static void getFile(File file,List<File> list) {
        String hzm = "";
        String name = "";
        int index = -1;
        //判断file是否是文件夹
        if(file.isDirectory()) {
            File[] files = file.listFiles();
            for(File f:files) {
                if(f.isDirectory()) {
                    getFile(f,list);
                }else {
                    name = f.getName();
                    index = name.lastIndexOf(".");
                    if(index!=-1) {
                        hzm = name.substring(index);
                    }
                    if(".java".equals(hzm)) {
                        list.add(f);
                    }
                }
            }
        }
    }
    //删除文件夹下的所有文件和文件夹
    public static void delete(File file) {
        //获得有的文件及文件夹
        File[] files = file.listFiles();
        //如果是文件,删除
        for(File f:files) {
            if(f.isDirectory()) {
                delete(f);
            }
            //删除当前文件夹或文件夹
            f.delete();
        }
        file.delete();
    }
}

三、IO流(输入/输出流:Input / Output)

IO数据流是一个有序的二进制数据,Java的IO流其实就是一些IO流工具类

? 通常程序需要从外部获取/输出信息
? 这个“外部”范围很广,包括诸如键盘、显示器、文件、磁盘、网络、另外一个程序等
? “信息”也可以是任何类型的,例如一个对象、串字符、图像、声音等

????????通过使用 java.io 包中的输入/输出流类就可以达到输入输出信息的目的

IO流的分类

1. 输入流和输出流:方向上的分类,以内存为角度的方向,例如,编程实现从U盘一个文件复制到硬盘一个文件 中,用输入流读内容,用输出流写内容,InputStream和Reader类的子类都是输入流;OutputStream和 Writer的子类都是输出流

2. 字节流和字符流:处理数据量分类,也就是每读 / 写一次读 / 写了一字节,那么这个流就是字节流 ;通常处理中文,显示中文时要使用字符流。InputStream和OutputStream类的子类都是字节流;Reader和 Writer的子类都是字符流

3. 节点流和处理流:节点流有叫基本流;处理流又叫高级流 ;处理流都是对节点流的封装,也就是处 理流在节点流的基础上增加了额外的功能。节点流能处理所有的功能需求,但效率低,处理流能处 理特定的需求,效率高

FileInputStream

public class TestFile {
    public static void main(String[] args) {
        //读取temp.txt文件内容
        //流使用后 一定要关闭!!!写在finally中
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("D:\\Lession\\Java2113\\temp.txt");
            int temp = 0;
            while((temp = fis.read())!=-1) {
                System.out.println(temp);
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:57:15  更:2022-02-09 20:58:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 18:20:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码