小白学Java:File类
小白学Java:File类
我们可以知道,存储在程序中的数据是暂时的,在程序终止的时候,存储在程序中的数据就会丢失。我们通常为了永久地保存在程序中创建地数据,需要将它们存储到磁盘上或者其他永久存储设备的文件中,这些文件之后可以被其他的程序传输和读取。
而java.io包下的File实用类库就可以被运用操作这些文件,File封装了在用户机器上处理文件系统所需要的所有功能。
官方给的定义是:代表的是文件或者目录路径名的抽象。
This class presents an abstract, system-independent view of hierarchical pathnames.
可以说,这个类提供了一个抽象的、与系统无关的层次路径名视图。
不同风格的分隔符
- 在windows系统中,用
\
间隔目录,用;
间隔不同的路径。 - 在Linux或unix中,用
/
间隔目录,用:
间隔不同的路径。
java为了屏蔽不同操作系统的差异性,提供了File.separator
表示间隔符,提供了File.pathSeparator
间隔不同路径。当然这两个是String类型,另外两个为Char类型,作用相同。
绝对与相对路径
绝对路径(absolute):以盘符或者/开头的路径。
相对路径(relative):相较于某个路径下才指明的路径。
在IDEA的main()方法中测试,相对路径是当前的Project下。
File file = new File("newFile");
System.out.println(file.getAbsolutePath());
//E:\java_learning\project01\newFile
File类常用方法
常用构造器
File(String pathname) //传入一个路径名(文件or目录)
File(String parent, String child) //在目录parent下创建一个子路径对象
File(File parent, String child) //在目录parent下创建一个子路径对象,区别是parent本身就是File对象
下面是创建File对象的一个例子,需要注意的是,创建对象并不意味着创建了一个真实的文件,而是一种抽象,可以通过这个File对象进行相应的操作。
//以绝对路径名作为参数,创建一个File对象。
File file = new File("D:\\newFile.txt");
我们之前提到,windows系统中目录层级之间的分隔符是反斜杠\
,Java中反斜杠是一个转义字符,所以要表示\
,需要写成\\
。
创建方法
下面的三个方法用以创建文件或者创建目录,都有返回的boolean值。
- 创建文件
public boolean createNewFile()
用以创建文件,创建成功返回true。但是如果该文件已经存在,则返回false。 - 创建目录
public boolean mkdir()
用以创建文件目录,创建成功返回true。但是需要注意的是:同样的,如果目录已经存在,则返回false,如果该文件目录的上层目录不存在,也不会创建。 - 创建多级目录
public boolean mkdirs()
同样是创建文件目录,如果已经存在,则返回false。但是和上面不同的是,如果上层目录不存在,它会一并创建。
需要注意:如果创建File对象时,传入的路径名没有指定盘符,则为相对路径名,在项目路径下。
判断方法
下面的方法都是以public boolean
修饰的方法,用以判断。
获取方法
- 关于
getPath
和getAbsolutePath
产生的疑惑?为啥这两个产生的结果相同呢?
于是我进行了新的测试:
File file = new File("relativeFile");
file.getAbsolutePath(); //E:\java_learning\project01\relativeFile
file.getPath(); //relativeFile
这次我以相对路径名作为参数传入,结果显而意见。getAbsolutePath
返回的是默认带着项目路径的绝对路径名,而getPath
只是将传入的路径名原原本本地返回。
- 关于产生的文件列表,其实还有list()方法,只不过它的返回值类型是
String[]
。list()和listFiles()都有传入参数是FilenameFilter
接口类型的重载方法。
public interface FilenameFilter {
boolean accept(File dir, String name);
}
我们可以通过匿名内部类,对产生的列表进行操作:
//打印该目录下的java文件
File path = new File("module01\\src\\com\\my\\FileTest");
File[] list;
//通过匿名内部类返回FilenameFilter的引用
list = path.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//选择接收.java结尾的文件
return name.endsWith(".java");
}
});
for(File l:list)
System.out.println(l.getName());
命名方法
public boolean renameTo(File dest)
把文件重命名为指定地文件路径,如果成功,返回true。
删除方法
public boolean delete()
删除文件或者目录。
- 一旦删除成功,无法在回收站复原,是不可逆的。
- 如果待删除的目录里面包含着文件或者子目录,则其不能被删除,我们可以通过下面的方法递归删除包含内容的目录。
- 删除完整的目录。
/**
* 静态方法,删除完整的目录
* @param file 传入File对象
*/
public static void deleteDirectory(File file){
//判断file对象是文件还是目录
if(file.isDirectory()){
//如果是目录,获取子文件和子目录列表
File[] fs = file.listFiles();
//遍历数组
for(File f :fs){
//递归删除
deleteDirectory(f);
}
}
//最后的无论是啥,都需要删除
file.delete();
}
小白学Java:File类的更多相关文章
- 小白学Java:RandomAccessFile
目录 小白学Java:RandomAccessFile 概述 继承与实现 构造器 模式设置 文件指针 操作数据 读取数据 read(byte b[])与read() 追加数据 插入数据 小白学Java ...
- 小白学Java:包装类
目录 小白学Java:包装类 包装类的继承关系 创建包装类实例 自动装箱与拆箱 自动装箱 自动拆箱 包装类型的比较 "=="比较 equals比较 自动装箱与拆箱引发的弊端 自动装 ...
- 小白学Java:老师!泛型我懂了!
目录 小白学Java:老师!泛型我懂了! 泛型概述 定义泛型 泛型类的定义 泛型方法的定义 类型变量的限定 原生类型与向后兼容 通配泛型 非受限通配 受限通配 下限通配 泛型的擦除和限制 类型擦除 类 ...
- 小白学Java:迭代器原来是这么回事
目录 小白学Java:迭代器原来是这么回事 迭代器概述 迭代器设计模式 Iterator定义的方法 迭代器:统一方式 Iterator的总结 小白学Java:迭代器原来是这么回事 前文传送门:Enum ...
- 小白学Java:奇怪的RandomAccess
目录 小白学Java:奇怪的RandomAccess RandomAccess是个啥 forLoop与Iterator的区别 判断是否为RandomAccess 小白学Java:奇怪的RandomAc ...
- 小白学Java:内部类
目录 小白学Java:内部类 内部类的分类 成员内部类 局部内部类 静态内部类 匿名内部类 内部类的继承 内部类有啥用 小白学Java:内部类 内部类是封装的一种形式,是定义在类或接口中的类. 内部类 ...
- 小白学Java:I/O流
目录 小白学Java:I/O流 基本分类 发展史 文件字符流 输出的基本结构 流中的异常处理 异常处理新方式 读取的基本结构 运用输入与输出 文件字节流 缓冲流 字符缓冲流 装饰设计模式 转换流(适配 ...
- Java File类总结和FileUtils类
Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...
- Java File 类的使用方法详解
Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍,有需要的Java开发者可以看 ...
随机推荐
- 计算机网络OSI模型
一. 理想模型-OSI 7层模型 那么数据是如何传输的呢?看下图:上层的Header+DATA作为新的Data再次被封装,到达目的地后就像剥洋葱一样掐头(去尾)最终留下你所要传的数据. 各层功能详细阐 ...
- openwrt上wifi探针的实现----mt7620a+rt2860v2
openwrt上wifi探针的实现----mt7620a+rt2860v2 [摘要:甚么是wifi探针 看到探针,感到很矮小上的模样,实在便是经过wifi汇集经由那个AP局限的脚机的mac地点,出有甚 ...
- FineReport报表和水晶报表的比较
FineReport报表和水晶报表的比较 FineReport报表软件针对复杂格式的报表数据及Web报表的展现,通过多源分片.不规则分组.双向扩展来轻松拖拽做复杂格式的报表,制作报表从此摆脱了复杂的S ...
- BZOJ 3166
BZOJ3196: Tyvj 1730 二逼平衡树 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3196 题意: 1.查询k在区间内的排名 ...
- .Net Core解除文件上传大小限制
一共要修改两处地方: \Startup.cs public void ConfigureServices(IServiceCollection services) { services.AddMvc( ...
- ssh批量免密
expect命令在linux下实现批量ssh免密 发布时间:2017-11-27 08:41:39 投稿:laozhang 本次文章主要给大家讲解了在linux系统下用expect命令实现批量ssh免 ...
- DataTable转成实体列表 和 DataRow转成实体类
#region DataTale转为实体列表 /// <summary> /// DataTale转为实体列表 /// </summary> /// <typeparam ...
- [梁山好汉说IT] 熵的概念 & 决策树ID3如何选择子树
[梁山好汉说IT] 熵的概念 & 决策树ID3如何选择子树 0x00 摘要 记录对概念的理解,用梁山好汉做例子来检验是否理解正确. 0x01 IT概念 1. 事物的信息和信息熵 1.1 事物的 ...
- Jenkins配置QQ邮箱发送邮件
1.登陆QQ邮箱 2. 在“帐户”里开启“POP3/SMTP”并获取授权码 3. 发送短信验证验证后得到下面验证码 aeoygabszxfecbdj #验证吗 点击确定之后,服务已经开启 4. Jen ...
- Linux Centos7 环境基于Docker部署Zookeeper服务搭建实战
配置Zookeeper安装目录 在宿主机配置zookeeper安装目录:/docker/develop/zookeeper 并且在文件夹创建 data 和logs 目录: mkdir -p /dock ...