🍁 博主 "开着拖拉机回家"带您 Go to New World.✨🍁 🦄
个人主页——🎐 🎐✨🍁 🪁🍁
希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥
一、学习内容
使用File类进行文件的操作,使用Java.io包完成一共有5个核心类和一个接口
- 五个核心接口:File、InputStream、OutputStream、Reader、Writer
- 一个标识接口:Serializable
一、创建文件
二、创建带有子目录的文件
三、取得文件内容
四、总结
二、具体内容
2.1 创建文件
在整个java.io包里面,File类是唯一 一个与文件本身操作有关的类,但是不涉及文件的具体内容,文件本身指的是文件的创建和删除。
要使用File类,那么首先就需要通过他提供的方法定义要操作的文件路径。
构造或方法 | 释义 |
public File(String pathname) | 设置完整路径 |
public File(File parent,String child)(安卓) | 设置父路径与子文件路径 |
public boolean createNewFile() throws IOException | 创建文件,如果目录不能访问,如果文件重名,或者是文件名称错误 |
public boolean delete() | 删除文件 |
public boolean exists() | 判断存在 |
范例:示例代码
public class Test2 {
public static void main(String args[]) throws Exception{
File file = new File("E:\\sublimefile\\test.txt"); // 设置文件路径
If (file.exists()) { // 文件存在
file.delete();
} else {
System.out.println(file.createNewFile());
}
}
}
以上的程序已经可以完成具体文件的创建,此时存在两个问题。
- 在window系统里面支持的是:“\”路径分隔符,Linux使用的是“/”路径分隔符;
|--------在File类提供了一个常量:public static final String separator
但是这样代码 看起来有点 长
File file = new File("E:" + File.separator + "sublimefile" + File.separator + "test.txt"); // 设置文件路径
2.2 创建带有子目录的文件
以上已经实现了文件的创建工作,但是这个时候是直接创建在了根路径下,下面来创建包含有子目录的文件
File file = new File("E:" + File.separator + "sublimefile" + File.separator + "demo" + File.separator + "test.txt"); // 设置文件路径
方法 | 释义 |
public File getParentFile() | 找到父路径 |
public boolean mkdirs() | 创建多级目录(父路径) |
代码示例:
public class Test2 {
public static void main(String args[]) throws Exception{
File file = new File("E:" + File.separator + "sublimefile" + File.separator
+ "hello" +File.separator + "demo" + File.separator + "test.txt"); // 设置文件路径
System.out.println(file.getParentFile().exists());
If (! file.getParentFile().exists()) { // 父路径不存在
file.getParentFile().mkdirs(); // 创建父路径
}
If (file.exists()) { // 文件存在
file.delete();
} else {
System.out.println(file.createNewFile());
}
}
}
2.3 取得文件内容
在File类里面提供了一系列取得文件信息内容的操作功能:
方法 | 释义 |
public long length() | 取得文件大小 |
public boolean isFile() | 判断是否是文件 |
public boolean isDirectory() | 判断是否是目录 |
public long lastModified() | 最近一次修改日期 |
代码示例:
import java.io.File;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test2 {
public static void main(String args[]) throws Exception {
File file = new File("E:" + File.separator + "jpg.jpeg");
if (file.exists()) {
System.out.println("是否是文件:" + (file.isFile()));
System.out.println("是否是目录:" + (file.isDirectory()));
System.out.println("文件大小:" + new BigDecimal((double) file.length() / 1024 / 1024).divide(new BigDecimal(1),
2, BigDecimal.ROUND_HALF_UP) + "M");
System.out.println("上次修改时间" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
}
}
}
整个取得过程里面取的文件相关信息,但是不包含有文件的内容。
方法 | 释义 |
public String[] list() | 列出目录下的信息 |
public String[] list(FilenameFilter filter) | 列出所有信息以File类包装 |
代码示例:
public class Test2 {
public static void main(String args[]) throws Exception {
File file = new File("E:" + File.separator);
if (file.isDirectory()) { // 现在给出的一个路径
String[] result = file.list();
for (int x = 0; x < result.length; x++) {
System.out.println(result[x]);
}
}
}
}
代码示例:
public class Test2 {
public static void main(String args[]) throws Exception {
File file = new File("E:" + File.separator);
if (file.isDirectory()) { // 现在给出的一个路径
File[] result = file.listFiles();
for (int x = 0; x < result.length; x++) {
System.out.println(result[x]);
}
}
}
}
下面看运行结果: 就不一样了
为了很好地体验出以上的操作的好处,下面输出一个类似于资源管器的界面。
示例代码(类似于资源管理器):
public class Test2 {
public static void main(String args[]) throws Exception {
File file = new File("E:" + File.separator);
if (file.isDirectory()) { // 现在给出的一个路径
File[] result = file.listFiles();
for (int x = 0; x < result.length; x++) {
System.out.println(result[x].getName() + "\t\t\t"
+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(new Date(result[x].lastModified())) + "\t\t"
+ (result[x].isDirectory() ? "文件夹":"文件")
+ new BigDecimal((double) result[x].length() / 1024 / 1024).divide(new BigDecimal(1),
2, BigDecimal.ROUND_HALF_UP) + "M");
}
}
}
}
通过系列验证可以发现,取得对象列表会更加的方便,因为可以继续对列表进行操作。
思考题:列出指定目录下的所有子目录
原则:如果现在给定的依然是一个目录,则应该列出里面所有的组成,应该使用递归的方式完成。
代码示例(列出指定目录下的所有子目录):
public class Test2 {
public static void main(String args[]) throws Exception {
File file = new File("E:" + File.separator );
print(file);
}
public static void print(File file) {
if (file.isDirectory()) { // 如果现在给定的是一个路径
File[] result = file.listFiles(); // 列出子目录
if (result != null) {
for (int x = 0; x < result.length; x++) {
print(result[x]);
}
}
}
System.out.println(file);
}
}
如果将以上输出操作换为删除操作,将会变为恶性程序。
三、总结
- File类本身只是操作文件的,不涉及到内容;
- File中的重要方法:
*设置完整路径:public File(String pathname);
*删除文件:public boolean delete();
*判断文件是否存在:public boolean exists()
*找到父路径:public File getParentFile();
*创建目录:public boolean mkdir(); - 在使用File类操作的时候路径的分隔符使用:File.separator;