File类

1File类
1.1创建对象

image-20240129202810087

常使用第一种情况:

//1.创建File对象
File f = new File("F:\\images\\nature.png");  //    \\转义字符
System.out.println(f);				//打印 new File对象的字符串(相对/绝对路径)
System.out.println(f.length());     //文件的字节大小

直接字符: /

File f1 = new File("F:/images/nature.png");   //      可以直接使用/

针对不同系统的分隔符File.separator对不同系统(比直接字符)有适应性

File f2 = new File("F:"+File.separator+"images"+File.separator+"nature.png");

注意

  • 文件路径可以使用 绝对路径 和 相对路径

    • 绝对路径:从盘符开始 (之前已使用)

    • 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件

       //相对路径    相对于当前工程project下 ,(最先以模块开始)!!!
       File file2 = new File("file-io-app/src/abc.txt");
       System.out.println(file2);
       System.out.println("文件的规范路径:" + file2.getCanonicalPath()); //返回此抽象路径名的规范路径名字符串。
      
  • File创建对象,可以是文件或文件夹

1.2常用API
方法说明
public boolean isDirectory()测试此路径名表示的File是否为文件夹
public boolean isFile()测试此路径名表示的File是否为文件
public boolean exists()测试此路径名表示的File是否存在
public String getAbsolutePath()返回此路径名的绝对路径字符串
public String getPath()返回定义File时使用的绝对相对路径
public String getName()返回此路径名表示的文件或文件夹的名称
public long lastModified()返回文件最后修改的时间ms
public class FileApiDemo {
    public static void main(String[] args) {
        File f1 = new File("src\\abc.txt");
        //a.获取文件绝对路径
        System.out.println(f1.getAbsolutePath());     //获取绝对路径
        //b.获取文件名称
        System.out.println(f1.getName());
        //c.获取定义文件的路径
        System.out.println(f1.getPath());             //创建File对象时使用的路径(绝对或相对)
        //d.判断是否为文件类型
        System.out.println(f1.isFile());
        //e.判断是否为文件夹类型
        System.out.println(f1.isDirectory());        //false  , 文件夹(包含其他文件)
        File file = new File("C:");
        System.out.println(file.isDirectory());      //true
        //f.文件是否存在
        System.out.println(f1.exists());
        //g.最后修改时间的毫秒值
        long time1 = f1.lastModified();
        System.out.println(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(time1));
    }
}
1.3创建文件
方法说明
public boolean createNewFile()创建一个新的空的文件
public boolean mkdir()只能创建一级文件夹 / 目录
public boolean mkdirs()可以创建多级文件夹/目录
public class GenerateNewFile {
    public static void main(String[] args) throws Exception {
        //1创建新的空的   文件
        File file = new File("F:\\code\\abc.txt");
        System.out.println(file.createNewFile());
        //2创建一级文件夹
        File file1 = new File("F:\\code\\test\\1\\2");
        System.out.println(file1.mkdir());              // false
        //3创建多级文件夹
        System.out.println(file1.mkdirs());              //true
    }
}
1.4删除文件
方法说明
public boolean delete()删除由此抽象路径名表示的空文件夹
  • delete方法默认只能删除空文件夹
  • delete方法直接删除,不走回收站;
public class DeleteFile {
    public static void main(String[] args) {
        File file = new File("\u202AF:\\code\\test.txt");
        System.out.println(file.delete());          //false   1KB 不能直接删除
        
        File file3 = new File("\u202AF:\\code\\test1.txt");
        System.out.println(file3.delete());         //false  不能直接删除空文件

        File file1 = new File("F:\\code\\1\\2\\3");
        System.out.println(file1.delete());         //true   直接删除文件夹  F:/code/1/2/3

        File file2 = new File("F:\\code\\1");
        System.out.println(file1.delete());         //false  不能直接删除非空文件夹
    }
}
1.5文件遍历
方法说明
public String[] list()获取当前目录下所有的“一级文件名称”到一个字符串数组中
public File[] listFiles()常用获取当前目录下 所有的“一级文件对象”到一个文件对象数组中并返回
public class FileApiDemo2 {
    public static void main(String[] args) throws IOException {
        File f = new File("D:\\work-manager");
        //1.获取目录所有一级文件(含文件夹)名称,到一个字符数组中,并返回
        //获取目录路径下的第一层文件(文件夹)
        String[] list = f.list();
        for (String s : list) {
            System.out.println(s);
        }
        //2.获取目录所有一级文件对象,到一个文件对象数组中返回
        File[] files = f.listFiles();
        for (File file : files) {
            System.out.println(file);
        }
    }
}

listFiles方法注意:

  • 调用者不存在时,返回null
  • 调用者是一个文件时,返回null , 需要目录(文件夹)
  • 调用者是一个空文件夹时,返回一个length为0的数组
  • 调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  • 调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容
  • 调用者是一个需要权限才能进入的文件夹时,返回null
1.6文件搜索

递归

  • 方法直接或间接 自己调用自己 recursion

image-20240131134025389

实例

D:盘中,搜索某个文件名称 并输出绝对路径;

  • 1定位出 一级文件对象数组
  • 2遍历全部一级文件对象,判断是否是文件
  • 3如果是文件,则判断是否是自己想要的
  • 4如果是文件夹,则继续 递归 重复上述整个过程
public class RecursionDemo4 {
    public static void main(String[] args) {
        //2.调用方法
        searchFile(new File("D:/"),"detect.p");
    }

    /**
     * 1.根据文件名称,递归搜索文件路径
     * @param dir  查找的文件目录
     * @param name 待查找的文件名称
     */
    public static void searchFile(File dir , String name){
        //3.判断dir是否为目录
        if(dir != null && dir.isDirectory()){
            //4.提取当前目录下的一级文件对象
            File[] files = dir.listFiles();
            //5.判断文件数组是否存在文件对象
            if (files != null && files.length > 0){
                //6.遍历文件数组
                for (File file : files) {
                    //7.文件对象是否为文件,是则匹配
                    if (file.isFile()){
                        //.contains模糊包含
                        if (file.getName().contains(name)){
                            System.out.println("找到了!!!"+name + "的绝对路径为" + file.getAbsolutePath());
                            //启动它
                            try {
                                //调用外部程序
                                Runtime.getRuntime().exec(file.getAbsolutePath());
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }else {
                        //8.是文件夹(目录)则递归匹配
                        searchFile(file,name);
                    }
                }
            }
        }else {
            System.out.println("您输入的文件不是目录,无法查询");
        }
    }
}
2字符集

计算机可以给人类字符进行编号,这套编号规则就是字符集 charset;

  • ASCII(American Standard Code for Information Interchage,美国信息交换标准代码)包括了数字、英文、符号;

    • 使用 1个字节存储一个字符 ,总共128个
  • GBK (即国标window系统默认的码表,包含了几万个汉字

    • GBK是中国的码表,一个中文以两个字节存储
  • Unicode (统一码、万国码、单一码)

    • 计算机科学领域里的一项业界字符码表标准
    • 容纳世界上大多数的常用文字和符号
    • Unicode会先通过 UTF-8 , UTF-16以及UTF-32的编码成二进制后 ,再存储到计算机中。 最常见为UTF-8
      • UTF-8 是 一个中文以三个字节存储

注意

  • UTF-8也要兼容ASCII
  • 编码前后 , 字符集需要一致,否则会出现中文乱码
  • 技术人员都应当使用UTF-8的字符集编码

image-20240131152452197

2.1编码/解码

String 编码

方法描述
byte[] getBytes()使用默认字符集将该字符串编码成一系列字节,将结果存储到新的字节数组
byte[] getBytes(String charsetName)使用指定字符集将该字符串编码成一系列的字节,将结果存储到新的字节数组

String 解码

方法描述
String(byte[] bytes)通过默认字符集解码 指定的字节数组来构造新的String
String(byte[] bytes,String charsetName)通过指定的字符集 解码指定的字节数组来构造新的String
public class CharsetDemo {
    public static void main(String[] args) throws Exception{
        //1.编码把文字转变为二进制
        String s = "我爱你中国,至死不渝hhh~~~";
        byte[] bytes = s.getBytes();// 默认UTF-8 , 中文 为 3个字节              共计34
        byte[] b = s.getBytes("GBK");   //GBK , 中文为2个字节       共计25
        System.out.println(bytes.length);
        //中文显示为负数
        System.out.println(Arrays.toString(bytes));
        System.out.println(b.length);
        System.out.println(Arrays.toString(b));

        //2.解码把二进制转变为中文字符
        //使用构造器,生成String
        //String rs = new String(bytes,"GBK");    //编码与解码的字符集要对应 , 乱码
        String rs = new String(bytes);
        System.out.println(rs);
        String rs1 = new String(b,"GBK");
        System.out.println(rs1);

        //3.换行符
        String s1 = "\n";
        byte[] bytes1 = s1.getBytes();
        System.out.println(bytes1.length);
        System.out.println(new String(bytes1));
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值