【Java】递归 File类 字符集

递归

        递归是方法自己调自己

死递归:

        就是无限循环的递归(会栈内存溢出)

正常递归:

        递归次数不易过多,可以正常结束

注意:

        1.方法在栈内存中执行,栈内存空间有大小限制,所有方法递归调用次数不宜过多,否则出栈内存溢出

        2.方法的调用是先进后出的特点,上面的方法不弹栈,下面的方法也不能弹栈,上面的方法不结束,下面的方法也不能结束

        3.要想进行正常的递归操作必须找到递归调用规律

        4.要想进行正常的递归操作必须找递归调用的出口

public class Demo {
    public static void main(String[] args) {
        method(10);
    }
    public static void method(int num) {
        System.out.println(num);
        num--;
        if (num == 0) {
            return;//不再继续调用自己了
        }
        method(num);
    }
}

File类

计算机的存储形式

硬盘

好处:

        可以持久化存储数据,计算机断电,数据依然可以在下次开机的时候进行读取,和使用

弊端:

        相对于内存来说,读取和存储数据速度慢一些(机械硬盘相较于固态硬盘寿命长,但是读取速度没有固态硬盘快)

内存

好处:

        存储数据和读取数据的速度会变的非常快

弊端:

        相对于硬盘来说,内存断电或者程序停止了存储在内存中的数据就会消失


File构造对象

        通过FIle类于IO流进行搭配使用就可以通过Java代码将数据从内存写入到硬盘文件或者从硬盘文件读取到内存中。

方法(创建对象)

说明

public File​

(String pathname)

根据文件路径创建文件对象

public File

​(String parent, String child)

根据父路径名字符串和子路径名字符串创建文件对象

public File​

(File  parent, String child)

根据父路径对应文件对象和子路径名字符串创建文件对象

File封装的对象仅仅是一个路径名 它可以是存在的,也可以是不存在的(存在操作,不存在创建)

public static String

pathSeparator

多个路径之间的分隔符号

public static String separator

一个路径中多个名称之间的分隔符号

public class Demo {
    public static void main(String[] args) {
        String path1 = "D:\\io\\a\\b\\c\\abc.txt";

        //多个路径之间的分隔符号
        String pathSeparator = File.pathSeparator;
        System.out.println(pathSeparator);

        //一个路径中的多个名字之间的分隔符号
        String separator = File.separator;
        System.out.println(separator);

        String path2 = "D:" + separator + "io" + separator + "a"+separator+"b"+separator+"c"+separator+"abc.txt";
    }
}

File类的判断文件类型,获取文件信息功能

相对路径:

        相对路径是指相对于当前项目/模块的路径

        File f = new File("day12\\abc.txt");

绝对路径:

        绝对路径是从盘符开始的路径,找到对应的盘符就可以找到文件

        File f = new File("D:\\abc\\a.txt");

        无论封装对象的时候使用相对还是绝对路径 getAbsolutePath 都获取到的是绝对路径

注意点:

        ①路径之间的间隔使用 \\ 因为使用 在Java中是转义字符

        ②使用相对路径去表示文件,文件会在模块的根目录下,如果要在src下需要在文件名前加src\\

方法

说明

public boolean isDirectory()

判断此路径名表示的File是否为文件夹

public boolean isFile()

判断此路径名表示的File是否为文件

public boolean exists()

判断此路径名表示的File是否存在

public long length()

返回文件的大小(字节数量)

public String getAbsolutePath()

返回文件的绝对路径

public String getPath()

返回定义文件时使用的路径

public String getName()

返回文件的名称,带后缀

public long lastModified()

返回文件的最后修改时间(时间毫秒值)

public class Demo {
    public static void main(String[] args) {
        //创建File对象,表示存在的文件
        File f = new File("day10\\io\\ab\\a.txt");
        System.out.println("f代表的是文件夹吗? " + f.isDirectory());
        System.out.println("f代表的是文件吗? " + f.isFile());
        System.out.println("f代表的文件/文件夹是否存在? " + f.exists());
        System.out.println("f代表文件的大小是多少?"+f.length());
        System.out.println("f代表文件的绝对路径?"+f.getAbsolutePath());
        System.out.println("f代表文件的定义是的路径?"+f.getPath());
        System.out.println("f代表文件名称?"+f.getName());
        System.out.println("f代表文件修改的最后时间?"+f.lastModified());
    }
}

File类创建文件的功能

方法

说明

public boolean createNewFile()

创建一个新的空的文件

public boolean mkdir()

只能创建一级文件夹

public boolean mkdirs()

可以创建多级文件夹

File类删除文件的功能

注意:

        ①如果文件或者文件夹被删除了,不会进回收站

        ②删除文件夹的时候,如果文件夹中还有文件是不会删除成功的

方法

说明

public boolean delete​()

删除由此抽象路径名的文件或空文件夹

File类的遍历功能

方法

说明

public String[] list()

获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回

public File[] listFiles()(常用)

获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)

public class Demo {
    public static void main(String[] args) {
        //创建File对象,代表存在的目录
        //File dir = new File("day10\\io\\abc");//文件夹不存在,获取的File对象数组是null
        //File dir = new File("day10\\io\\ab\\a.txt");//是存在的文件,获取的File对象数组是null
        //File dir = new File("day10\\io\\abcd");//文件夹存在,但内部没有内容,获取的File对象数组长度是0
        File dir = new File("day10\\io\\ab");

        //调用listFiles方法,获取当前目录中的子目录和文件组成的File对象数组
        File[] files = dir.listFiles();

        //安全性判断
        if (files != null && files.length > 0) {
            //增强for遍历
            for (File file : files) {
                if (file.isFile()) {
                    System.out.println("文件: " + file.getName() + " 的长度: " + file.length());
                } else {
                    System.out.println("文件夹: " + file.getName());
                }
            }
        }
    }
}
注意:调用者下的 [直系]子目录/子文件都封装成File对象并且存储到一个数组中返回, 文件不存在或者是一个文件,返回的数组为 NULL空指针异常,是 一个文件夹,但是里面没有任何数据则会返回 一个空数组,长度0。 

字符集

字符集基础知识:

        字符集(Character set) 字符集合,字符集包含的字符个数不同,常见字符集有:

ASCII字符集,GBK字符集,Unicode(UTF-8)字符集

        计算机要准确处理字符集文字,就需要进行字符编码,以便计算机识别存储各种文字

ASCII:使用1个字节存储一个字符,一个字节是8位

GBK:兼容ASCII编码,但其中文字符一般以两个字节的形式存储

Unicode(UTF-8):兼容ASCII编码,编码后一个中文一般以三个字节的形式存储

注意:

        ①字符解码时使用的字符集和编码时使用的字符集必须一致,否则会出现乱码

        ②英文和数字在任何国家的编码中都不会乱码

String编码

String解码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值