10人参与 • 2025-06-10 • Java
file
是java.io.
包下的类,file
类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。
file类的对象可以代表文件/文件夹,并可以调用其提供的方法对象文件进行操作。
注意:file
类只能对文件本身进行操作,不能读写文件里面存储的数据,如果需要读写文件,就要用到io
流。
构造器 | 说明 |
---|---|
public file(string pathname) | 根据文件路径创建文件对象 |
public file(string parent,string child) | 根据父路径和子路径名字创建文件对象 |
public file(file parent,string child) | 根据父路径对应文件对象和子路径名字创建文件对象 |
注意:
file
对象既可以代表文件、也可以代表文件夹。file
封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的。file f1 =new file ("e:\\resource\\wang.jpg");
可以使用相对路径定位文件对象
file f1 =new file ("resource\\wang.jpg");
方法名称 | 说明 |
---|---|
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方法时的注意事项:
null
。null
。递归是一种算法,从形式上来说,方法调用自身的形式称为方法递归。
两种形式
案例:递归求阶乘
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(american standard code for information interchange,美国信息交换标准代码),包含英文、符号等字符。
存储规则:
2^7 = 128
个(满足英语等简单语言需求)。局限性:
定位:
汉字编码字符集,涵盖 2万多个汉字及符号,解决中文存储问题。
存储规则:
编码规则:
汉字的 第一个字节的第一位必须是1(用于区分ascii字符,避免冲突)。
示例辅助:
我a你
(“我”“你”是汉字,各占2字节;“a”是ascii,占1字节)。xxxxxxxx xxxxxxxx 0xxxxxxx xxxxxxxx xxxxxxxx
(中间0xxxxxxx
是ascii的“a”,两侧是汉字的两字节)1xxxxxxx xxxxxxxx 0xxxxxxx 1xxxxxxx xxxxxxxx
定位:
跨语言、跨平台的字符编码标准,目标是覆盖全球所有字符(包括各国文字、符号、 emoji 等)。
核心特点:
u+0041
表示字母 a
,u+4e2d
表示汉字 中
)。局限性:
unicode 本身不规定存储方式,直接按码点存储(如 u+4e2d
需 2 字节)会导致 空间浪费(如 ascii 字符仅需 1 字节,但 unicode 需 2 字节)。
定位:
unicode 的可变长度编码方式,是互联网最主流的字符编码(兼容 ascii,节省存储空间)。
存储规则:
u+0000 ~ u+007f
,首位固定为 0
,与 ascii 完全兼容)。u+0080 ~ u+07ff
)。u+0800 ~ u+ffff
)。u+10000 ~ u+10ffff
)。1
标识长度(如 110xxxxx
表示2字节,1110xxxx
表示3字节)。10
开头(如 10xxxxxx
)。优势:
对比总结
字符集 | 编码方式 | 存储空间特点 | 兼容性 | 典型应用场景 |
---|---|---|---|---|
ascii | 定长(1字节) | 仅支持128个字符 | 无扩展支持 | 早期英文系统 |
gbk | 混合(1/2字节) | 中文占2字节,兼容ascii | 仅支持中文及少数符号 | 中文windows系统 |
unicode | 无(仅码点) | 需配合utf-8/16/32存储 | 需转换才能兼容旧系统 | 跨语言标准(如java内部) |
utf-8 | 变长(1-4字节) | 英文1字节,中文3字节 | 完全兼容ascii | 互联网、linux/ macos系统 |
string → 字节数组
方法签名 | 说明 |
---|---|
byte[] getbytes() | 用平台默认字符集,将字符串编码为字节数组 |
byte[] getbytes(string charsetname) | 用指定字符集(如"utf-8" ),将字符串编码为字节数组 |
字节数组 → string
构造方法签名 | 说明 |
---|---|
string(byte[] bytes) | 用平台默认字符集,解码字节数组为字符串 |
string(byte[] bytes, string charsetname) | 用指定字符集(如"utf-8" ),解码字节数组为字符串 |
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(); } } }
字符集必须一致:
编码用 utf-8
,解码也必须用 utf-8
;若编码和解码字符集不同,必然出现乱码(如示例中用gbk
解码utf-8
字节)。
平台默认字符集的风险:getbytes()
和 new string(byte[])
依赖系统默认字符集(windows 多为 gbk
,linux/mac 多为 utf-8
),跨平台易出问题,建议始终显式指定字符集(如"utf-8"
)。
异常处理:
方法会抛出 unsupportedencodingexception
(如传入不存在的字符集"utf8"
,少写横线),需捕获或声明抛出。
到此这篇关于java io流必备之file、递归与字符集的文章就介绍到这了,更多相关java io流file、递归与字符集内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论