JavaSE学习笔记(八)File类、字符集

1 File类

  • File类的对象代表操作系统的文件(文件、文件夹),File类在java.io.File包下
  • File类提供了诸如:创建文件对象代表文件,获取文件信息(大小、修改时间)、删除文件、创建文件(文件夹)等功能

1.1 File类创建对象

构造器说明
public File​(String pathname)根据文件路径创建文件对象
public File​(String parent, String child)根据父路径名字符串和子路径名字符串创建文件对象
public File​(File parent, String child)根据父路径对应文件对象和子路径名字符串创建文件对象

File对象可以定位文件和文件夹
File封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的

1.2 绝对路径相对路径

  • 绝对路径:从盘符开始
File file1 = new File(D:\\JavaCode\\a.txt”)
  • 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件
File file1 = new File(“模块名\\a.txt”)

1.3 File类常用方法

方法名称说明
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()返回文件的最后修改时间(时间毫秒值)

1.4 File类创建文件

方法名称说明
public boolean createNewFile()创建一个新的空的文件
public boolean mkdir()只能创建一级文件夹
public boolean mkdirs()可以创建多级文件夹
public long delete()删除由此抽象路径名表示的文件或空文件夹

1.5 File类遍历文件夹

方法名称说明
public String[] list()获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回
public File[] listFiles()(常用)取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
  • 当文件不存在时或者代表文件时,返回null
  • 当文件对象代表一个空文件夹时,返回一个长度为0的数组
  • 当文件对象是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  • 当文件对象是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
  • 没有权限访问该文件夹时,返回null

根据文件名递归查找文件

public static void searchFile(File dir,String fileName){
	// 1、判断dir是否是目录
   if(dir != null && dir.isDirectory()){
       // 可以找了
       // 2、提取当前目录下的一级文件对象
       File[] files = dir.listFiles(); // null  []
       // 3、判断是否存在一级文件对象,存在才可以遍历
       if(files != null && files.length > 0) {
           for (File file : files) {
               // 4、判断当前遍历的一级文件对象是文件 还是 目录
               if(file.isFile()){
                   // 5、是不是咱们要找的,是把其路径输出即可
                   if(file.getName().contains(fileName)){
                       System.out.println("找到了:" + file.getAbsolutePath());
                       // 启动它。
                       try {
                           Runtime r = Runtime.getRuntime();
                           r.exec(file.getAbsolutePath());
                       } catch (IOException e) {
                           e.printStackTrace();
                       }
                   }
               }else {
                   // 6、是文件夹,需要继续递归寻找
                   searchFile(file, fileName);
               }
           }
       }
   }else {
       System.out.println("对不起,当前搜索的位置不是文件夹!");
   }
}

删除非空文件夹

先使用递归将内部文件全部删除产生空文件夹,再删除空文件夹

/**
   删除文件夹,无所谓里面是否有内容,都可以删除
 * @param dir
 */
public static void deleteDir(File dir){
    // 1、判断dir存在且是文件夹
    if(dir != null && dir.exists() && dir.isDirectory()){
        // 2、提取一级文件对象。
        File[] files = dir.listFiles();
        // 3、判断是否存在一级文件对象,存在则遍历全部的一级文件对象去删除
        if(files != null && files.length > 0){
            // 里面有内容
            for (File file : files) {
                // 4、判断file是文件还是文件夹,文件直接删除
                if(file.isFile()){
                    file.delete();
                }else {
                    // 递归删除
                    deleteDir(file);
                }
            }
        }
        // 删除自己
        dir.delete();
    }

2 字符集

2.1 常见字符集

  • ASCII字符集:
    • ASCII(American Standard Code for Information Interchange,美国信息交换标准代码):包括了数字、英文、符号
    • ASCII使用1个字节存储一个字符,一个字节是8位,总共可以表示128个字符信息,对于表示英文、数字来说是够用
  • GBK:
    • GBK是中国的码表,包含了几万个汉字等字符,同时也要兼容ASCII编码
    • GBK编码中一个中文字符一般以两个字节的形式存储
  • Unicode字符集:
    • 统一码,也叫万国码。是计算机科学领域里的一项业界标准
    • UTF-8是Unicode的一种常见编码方式
    • UTF-8编码后一个中文一般以三个字节的形式存储,同时也要兼容ASCII编码
    • 技术人员都应该使用UTF-8的字符集编码

2.2 编码解码操作

  • 编码
方法名称说明
byte[] getBytes​()使用平台的默认字符集将该 String编码为一系列字节,将结果存储到新的字节数组中
byte[] getBytes​(String charsetName)使用指定的字符集将该 String编码为一系列字节,将结果存储到新的字节数组中
// 1、编码:把文字转换成字节(使用指定的编码)
String name = "方佬肆fang";
// byte[] bytes = name.getBytes(); // 以当前代码默认字符集进行编码 (UTF-8)
byte[] bytes = name.getBytes("GBK"); // 指定编码
System.out.println(bytes.length); // 2 x 3 + 4 = 10
System.out.println(Arrays.toString(bytes)); // [-73, -67, -64, -48, -53, -63, 102, 97, 110, 103]
  • 解码
方法名称说明
String​(byte[] bytes)通过使用平台的默认字符集解码指定的字节数组来构造新的 String
String​(byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来构造新的 String
// 2、解码:把字节转换成对应的中文形式(编码前 和 编码后的字符集必须一致,否则乱码 )
// String rs = new String(bytes); // 默认的UTF-8
String rs = new String(bytes, "GBK"); // 指定GBK解码
System.out.println(rs); // 方佬肆fang
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值