JavaIO——File类

1、File文件类

File类(描述具体文件或文件夹的类):是唯一一个与文件本身操作有关的程序类,可完成文件的创建、删除、取得文件信息等操作。但不能对文件的内容进行修改。

(1)File类的基本使用

File类只用于创建文件文身并不对其内容做任何处理。

Java.Io.File是一个普通的类,直接产生实例化对象,要想得到实例化对象则需用到其提供的构造方法。

A. File类中提供的构造方法

 public File(String pathname)其中pathname位要传入对象的绝对路径。

public File(String parent, String child)设置父路径和子路径。

B. File类中的普通方法

判断文件是否存在:public boolean exists()

创建文件:public boolean createNewFile()

删除文件:public boolean delete()

package myIO;

import java.io.File;
import java.io.IOException;

public class Test {
	public static void main(String[] args) {
		//定义要操作文件的路径
		File file = new File("C:\\Users\\lenovo\\Desktop\\TestIo.java");
		//查找指定文件是否存在(不存在返回false,反之亦然)
		System.out.println(file.exists());
		try {
			//若指定文件不存在,则创建新文件
			file.createNewFile();
			//创建文件后打印文件是否存在
			System.out.println(file.exists());
		} catch (IOException e) {
			e.printStackTrace();
		}
//对文件进行删除
		file.delete();
		//进行删除操作后打印文件是否存在
		System.out.println("执行删除操作后文件存在与否?");
		System.out.println(file.exists());
	}
}

                   

/*
 * 实现程序:文件不存在则创建,存在则删除
 * */
public class Test{
	public static void main(String[] args) throws IOException {
		File file = new File("C:\\\\Users\\\\lenovo\\\\Desktop\\\\TestIo.java");
		if(!file.exists()) {
			file.createNewFile();
		}else {
			file.delete();
		}
	}
}

               

上述方法应该是最简化的文件处理操作了,但是仍然存在问题:如Linux下文件路径的分隔符用“/”,而在windows下则用的是“\”;但是即便这样也不影响跨平台性,我们可以引入File类的一个常量"public static nal String separator "来对其描述。

public class Test{
	public static void main(String[] args) throws IOException {
		//利用File类的常量来设置不同操作系统下的分隔符
		//separator由不同操作系统下的JVM来决定到底是"/"还是"\"
		String singal = File.separator;
		File file = new File("C"+singal+"Users"+singal+"lenovo"
		             +singal+"Desktop"+singal+"TestIO.java");
		System.out.println(file.exists());
		if(file.exists()) {
			file.createNewFile();
		}else {
			file.delete();
		}
	}
}

Java中要进行文件的处理操作是要通过本地操作系统支持的,在这之中如果操作的是同名文件,就可能出现延迟的问题。(开发之中尽可能避免文件重名问题)

(2)目录操作

     取得父路径:public String getParent() 返回当前的父路径

     取得父File对象:public File getParentFile() 返回当前的父File对象

     创建父目录: public boolean mkdirs() 有多少级就创建多少级 



public class Test{
	 public static void main(String[] args) throws IOException {
			String singal = File.separator;
			File file = new File("G:"+singal+"lemon"+singal+"javaIO"
			                      +singal+"TestIO.java");
			if(!file.getParentFile().exists()) {
				file.mkdirs();
			}
	}
 }

                                               

若使用file.mkdirs()创建,则创建的为文件夹。而若使用filegetParentFile.mkdirs()创建时则为目录。


public class Test{
	 public static void main(String[] args) throws IOException {
			String singal = File.separator;
			File file = new File("G:"+singal+"lemon"+singal+"javaIO"
			                      +singal+"TestIO.java");
			//判断父目录是否存在
			if(!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			}
	}
 }

 

 public class Test{
	 public static void main(String[] args) throws IOException {
			String singal = File.separator;
			File file = new File("G:"+singal+"lemon"+singal+"javaIO"
			                      +singal+"TestIO.java");
			//返回当前的父路径
			System.out.println("返回当前的父路径");
			System.out.println(file.getParent());
			//返回当前父File对象
			System.out.println("返回当前父File");
			System.out.println(file.getParentFile());
			//判断父目录是否存在
			if(!file.getParentFile().exists()) {
				//创建多级目录
				file.getParentFile().mkdirs();
			}
			//若文件存在则删除
			if(file.exists()) {
				file.delete();
			}else {
				//文件不存在,则创建新文件
				file.createNewFile();
			}
	}

                           

   

()取得文件信息

         判断路径是否是文件: public boolean isFile()

判断路径是否是目录: public boolean isDirectory()

取得文件大小(字节):  public long length()

最后一次修改日期 : public long lastModied()


/*
 * 取得文件信息
 * */

public class Test{
	public static void main(String[] args) {
		String singal = File.separator;
		File file = new File("G:"+singal+"lemon"+singal+"javaIO"
		                      +singal+"TestIO.java");
		//判断上级目录是否为文件
		System.out.println("上级目录是否为文件?");
		System.out.println(file.getParentFile().isFile());
		//判断当前目录是否为文件
		System.out.println("该目录下是否为文件?");
		System.out.println(file.isFile());
		//查看当前对象是否为路径
		System.out.println("当前对象为路径?");
		System.out.println(file.isDirectory());
		//取得文件的大小
		System.out.println("当前文件的大小为:");
		long length = file.length();
		System.out.println(length);
		//取得文件的最后修改日期
		System.out.println("当前文件的最后修改日期为:");
		long date = file.lastModified();
		System.out.println(date);
	}
}

                      

取得本地文件的相关信息:


/*
 * 列出当前目录下所有的文件
 * */
public class Test{
	public static void main(String[] args) {
		String singal = File.separator;
		//要操作的文件
		File file = new File("C:"+singal+"Users"+singal+"lenovo");
		//保证是目录且存在
		if(file.exists()&&file.isDirectory()) {
			File[] result = file.listFiles();
			for (File file2 : result) {
				System.out.println(file2);
			}
		}
	}
}
 

                       

我们不难发现根据File类提供的listFiles可以取得本地文件的信息,但是这样只能取得第一级目录下的相关信息。若我们想要取得所有级的信息,则需要我们自己进行递归操作处理。


/*
 * 打印当前目录下所有层级的文件信息
 * */
public class Test{
	public static void main(String[] args) {
		String singal = File.separator;
		//要操作的文件
		File file = new File("D:"+singal+"Users"+singal+"lenovo");
		listAllFileInfor(file);
	}
	public static void listAllFileInfor(File file) {
		if(file.isDirectory()) {
			//file对象是目录,列出子目录的信息
			File[] files = file.listFiles();
			for (File file2 : files) {
				//进行递归,
				listAllFileInfor(file2);
			}
		}else {
			//当前操作的不是目录
			System.out.println(file);
		}
	}
}

      

现在所有的代码都在main线程中执行,可以发现只有当listAllFileInfor没有执行完,main的后续操作也无法完成。正是因为这种耗时操作使得主线程出现了阻塞,而导致后续代码无法直接正常执行完毕。若不想让其别阻塞,我们需要重新起一个线程来对其进行操作。


/*
 * 解决阻塞main线程,另起线程
 * */
public class Test{
	public static void main(String[] args) {
		new Thread(()->{
			String singal = File.separator;
			//要操作的文件
			File file = new File("G:"+singal+"lenmon");
			listAllFileInfor(file);
		},"输出线程").start();
		System.out.println("main执行完毕");
	}
	public static void listAllFileInfor(File file) {
		if(file.isDirectory()) {
			//file对象是目录,列出子目录的信息
			File[] files = file.listFiles();
			for (File file2 : files) {
				//进行递归,
				listAllFileInfor(file2);
			}
		}else {
			//当前操作的不是目录
			System.out.println(file);
		}
	}
}
                         

猜你喜欢

转载自blog.csdn.net/qq_40409115/article/details/80287373