it编程 > 编程语言 > Java

Java IO流必备之File、递归与字符集举例详解

10人参与 2025-06-10 Java

file

创建file类的对象

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

注意

file f1 =new file ("e:\\resource\\wang.jpg");

可以使用相对路径定位文件对象

file f1 =new file ("resource\\wang.jpg");

file类的相关方法

方法名称说明
public boolean exists()判断当前文件对象对应的文件路径是否存在,存在返回true
public boolean isfile()判断当前文件对象指代的是否是文件,是文件返回true,反之
public boolean isdirectory()判断当前文件对象指代的是否是文件夹,是文件夹返回true
public string getname()获取文件的名称(包含后缀)
public long length()获取文件的大小,返回字节个数
public long lastmodified()获取文件的最后修改时间
public string getpath()获取创建文件对象时使用的路径
public string getabsolutepath()获取绝对路径
方法名称说明
public boolean createnewfile()创建一个新的空文件
public boolean mkdir()只能创建一级文件夹
public boolean mkdirs()可以创建多级文件夹
public boolean delete()删除文件、空文件夹

注意delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站。

方法名称说明
public string[] list()获取当前目录下所有的“一级文件名称”到一个字符串数组中返回
public file[] listfiles()获取当前目录下所有的“一级文件对象”到一个文件对象数组中返回

使用listfiles方法时的注意事项

方法递归

认识递归

递归是一种算法,从形式上来说,方法调用自身的形式称为方法递归。

两种形式

案例:递归求阶乘

public class recursiontest2{
   public static void main(string[] args ){
       int result = f(5);
       system.out.println("5的阶乘是:"+result); 
   }
   public static int f(int n){
       if(n==1) return 1;
       else return n*f(n-1);     
   }
}

递归算法的三要素:

  • 递归公式
  • 递归的终结点
  • 递归的方向必须走向终结点

文件搜索

使用递归算法搜索需要的文件。

public class test {
    public static void main(string[] args) {
        file dir  = new file("c:\\");
        searchfile(dir,"qq.exe");
    }

    public static void searchfile(file dir,string filename){
        if(dir==null||!dir.exists()) return;

        file[] files = dir.listfiles();

        if(files!=null && files.length>0){
            for(file file:files){
                if(file.isfile()){
                    if(file.getname().equals(filename)){
                        system.out.println("找到了目标文件:"+file.getabsolutepath());
                    }
                }else{
                    searchfile(file,filename);
                }
            }
        }
    }

}

字符集

常见字符集

标准ascii字符集

gbk(汉字内码扩展规范,国标)

unicode(统一码、万国码)

utf-8(unicode transformation format - 8-bit)

对比总结

字符集编码方式存储空间特点兼容性典型应用场景
ascii定长(1字节)仅支持128个字符无扩展支持早期英文系统
gbk混合(1/2字节)中文占2字节,兼容ascii仅支持中文及少数符号中文windows系统
unicode无(仅码点)需配合utf-8/16/32存储需转换才能兼容旧系统跨语言标准(如java内部)
utf-8变长(1-4字节)英文1字节,中文3字节完全兼容ascii互联网、linux/ macos系统

编码与解码

字符串编码与解码方法总结

方法签名说明
byte[] getbytes()平台默认字符集,将字符串编码为字节数组
byte[] getbytes(string charsetname)指定字符集(如"utf-8"),将字符串编码为字节数组
构造方法签名说明
string(byte[] bytes)平台默认字符集,解码字节数组为字符串
string(byte[] bytes, string charsetname)指定字符集(如"utf-8"),解码字节数组为字符串

示例代码(java)

import java.io.unsupportedencodingexception;

public class simplecharsetexample {
    public static void main(string[] args) {
        string text = "你好";

        try {
            // 编码:string → byte[]
            byte[] utf8bytes = text.getbytes("utf-8");  // utf-8编码,1个中文占3字节
            byte[] gbkbytes = text.getbytes("gbk");     // gbk编码,1个中文占2字节

            system.out.println("utf-8字节数:" + utf8bytes.length); // 输出:6
            system.out.println("gbk字节数:" + gbkbytes.length);    // 输出:4

            // 解码:byte[] → string
            string decodedutf8 = new string(utf8bytes, "utf-8");   // 正确解码
            string decodedgbk = new string(gbkbytes, "gbk");       // 正确解码
            string wrongdecode = new string(utf8bytes, "gbk");     // 错误解码(乱码)

            system.out.println("utf-8解码:" + decodedutf8);  // 输出:你好
            system.out.println("gbk解码:" + decodedgbk);    // 输出:你好
            system.out.println("错误解码:" + wrongdecode);  // 输出乱码:浣犲ソ
        } catch (unsupportedencodingexception e) {
            e.printstacktrace();
        }
    }
}

核心注意事项

总结 

到此这篇关于java io流必备之file、递归与字符集的文章就介绍到这了,更多相关java io流file、递归与字符集内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

SpringCloudGateway 自定义局部过滤器场景分析

06-10

如何在Java中使用org.json和JSON-B解析与编写JSON

06-10

Java使用Spring AI的10个实用技巧分享

06-10

Java的内存泄漏和性能瓶颈解读

06-10

java并发中的同步器使用方式

06-10

Java中的内存模型(JMM)和锁机制详解

06-10

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论