Java IO操作之File类

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_18948359/article/details/86656640