java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java IO流File、递归与字符集

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

作者:EnigmaCoder

Java IO输入输出是我们日常开发中必不可少的一部分,无论是读写文件、传输数据、处理日志,IO 都是底层支持,这篇文章主要介绍了Java IO流必备之File、递归与字符集的相关资料,需要的朋友可以参考下

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、递归与字符集内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文