版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18948359/article/details/86656640
Java IO 简介
Java IO(数据输入\输出数据流) 指的是通过数据输入\输出的方式,对文件进行操作。输入模式:是由程序创建某个信息后来源的数据流,并将其打开,获取来源数据流的信息。输出模式:是有程序创建某个输出对象的数据流,并打开数据对象,将数据写入到数据流中。
进行文件操作,需要使用的是 java.io
包完成。java.io
包中有5个类和1个接口:
- 五个核心类:File、OutputStream、InputStream、Writer 和 Reader
- 一个接口指:Serializable
File 类
在 I/O 中唯一与文件本身有关的类是 File,使用此类的可以创建或者删除文件。 File 类的构造方法:public File(String pathname)
,在使用 File 类时,需要传入一个文件路径。
在 windows 系统上面,使用 \
作为路径分隔符的时候,需要使用转义 \\
来代替 \
。在 linux 中使用 /
表示目录分隔符。
File 类操作
File 类的两个重要常量
import java.io.File;
public class FileConstant {
public static void main(String[] args) {
// 输出 ; pathSeparator 表示分号
System.out.println("pathSeparator : "+File.pathSeparator);
// 输出 \ separator 表示 分割符
System.out.println("separator: "+File.separator);
}
}
创建文件、判断文件是否存在、删除文件
当我们在创建文件的时候,会发现文件并没有立马就创建成功,而是会有延时,这是因为我们在创建文件的时候,是通过程序调用 JVM,让 JVM 再去调用系统的创建文件的命令。
import java.io.File;
public class Demo {
public static void main(String[] args) throws Exception {
File file = new File("E:" + File.separator + "test.txt");
if (file.exists()) {// 文件是否存在
file.delete();// 如果存在则删除
} else {
System.out.println(file.createNewFile());// 如果文件不存在则创建文件并返回boolean值
}
}
}
判断父路径是否存在、创建文件夹
- 找到父类路径:public File getParentFile();
- 创建目录:public boolean mkdirs();
import java.io.File;
public class Demo {
public static void main(String[] args) throws Exception {
File file = new File("E:" + File.separator + "Demo" + File.separator + "test.txt");// 设置文件路径
if (!file.getParentFile().exists()) {// 父路径不存在
// mkdirs() 方法可以创建多级的父目录,
// mkdir() 方法只能创建一级父目录
file.getParentFile().mkdirs();// 创建父路径
}
if (file.exists()) {// 文件存在
file.delete();
} else {
System.out.println(file.createNewFile());// 文件不存在,创建新文件
}
}
}
获取文件的信息
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 Demo {
public static void main(String[] args) throws Exception {
File file = new File("e:" + File.separator + "Demo" + File.separator + "test.jpg");
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(2),
2, BigDecimal.ROUND_HALF_UP) + "M");
System.out.println("上次修改时间:" + new SimpleDateFormat("yyyy-MM-dd").format(new Date(file.lastModified())));
}
}
}
列出文件目录
- 列出目录下的信息:public String[] list();
- 列出所有的信息以File类对象包装:public File [ ] listFiles();
import java.io.File;
public class TestDemo {
public void listName() {
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 void voidListPathAndName() {
File file = new File("e:" + File.separator);
if (file.isDirectory()) {
File result[] = file.listFiles(); // 列出File类对象
for (int x = 0; x < result.length; x++) {
// 输出的时候带有文件路径
System.out.println(result[x]);
}
}
}
public static void main(String[] args) {
TestDemo t = new TestDemo();
t.voidListPathAndName();
}
}
实战
要求:列出指定目录下的全部内容,如果存在子目录,连子目录也需要列出:
import java.io.File;
public class Demo {
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);
}
}