上一篇说了说多线程的知识,这次说说IO流吧,这也是以后再工作中必不可少的知识。

File

  • java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关
  • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
  • 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。
  • File对象可以作为参数传递给流的构造器

File的常用构造器

  • publicFile(String pathname)
    以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
  • 绝对路径:是一个固定的路径,从盘符开始
  • 相对路径:是相对于某个位置开始
  • public File(String parent,String child)
    以parent为父路径,child为子路径创建File对象。
  • public File(File parent,String child)
    根据一个父File对象和子文件路径创建File对象

路径分割符

  • 路径中的每级目录之间用一个路径分隔符隔开。
  • 路径分隔符和系统有关:
  • windows和DOS系统默认使用“\”来表示
  • UNIX和URL使用“/”来表示
  • Java程序支持跨平台运行,因此路径分隔符要慎用。
  • 为了解决这个隐患,File类提供了一个常量:

public static final String separator。根据操作系统,动态的提供分隔符。

举例:

File file1 = new File("d:\\path\\info.txt");
File file2 = new File("d:" + File.separator + "path" + File.separator + "info.txt");
File file3 = new File("d:/path");

File类的获取功能

• public String getAbsolutePath():获取绝对路径
• public File getAbsoluteFile():获取绝对路径表示的文件
• public String getPath() :获取路径
• public String getName() :获取名称
• public String getParent():获取上层文件目录路径。若无,返回null
• public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
• public long lastModified() :获取最后一次的修改时间,毫秒值
• public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
• public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
• public boolean renameTo(File dest):把文件重命名为指定的文件路径

File类的判断功能

• public boolean isDirectory():判断是否是文件目录
• public boolean isFile() :判断是否是文件
• public boolean exists() :判断是否存在
• public boolean canRead() :判断是否可读
• public boolean canWrite() :判断是否可写
• public boolean isHidden() :判断是否隐藏

File类的创建功能

• public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
• public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
• public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建

File类的删除功能

  • public boolean delete():删除文件或者文件夹
    删除注意事项:
    Java中的删除不走回收站
    要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录

下面用一个图来说说说用File类方法时怎么体现到本地真实路径上的。

java 进入指定目录并执行git clone 命令_Test

关于File就是点方法,下面发几个题练一下吧:

第1题

1、使用绝对路径,在D盘下创建一个testIO文件夹,然后在testIO文件夹中创建一个1.txt文件

2、使用相对路径,在当前项目下创建一个testIO文件夹,然后在testIO文件夹中创建一个1.txt文件

package com.atguigu.test01;

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

import org.junit.Test;

public class Test01 {
	@Test
	public void test01() throws IOException {
		File dir = new File("d:/testIO");
		dir.mkdir();
		
		File file = new File("d:/testIO/1.txt");
		file.createNewFile();
	}
	
	@Test
	public void test02() throws IOException {
		File dir = new File("testIO");
		dir.mkdir();
		
		File file = new File("testIO/1.txt");
		file.createNewFile();
	}
}
第2题

1、检查D盘的testIO文件夹下是否存在文件a.txt,如果不存在则创建该文件。

2、获取D盘的testIO文件夹下的a.txt文件的文件名,文件大小,文件的绝对路径和父路径等信息,并将信息输出在控制台

3、判断File file = new File(“d:\testIO”);是否文件,是文件则输出:xxx是一个文件,是否文件夹,是文件夹则输出:xxx是一个文件夹

4、删除D盘的testIO文件夹下的a.txt文件

5、删除当前项目下的testIO文件夹下的1.txt文件,然后删除testIO文件夹

package com.atguigu.test02;

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

import org.junit.Test;

public class Test02 {
	@Test
	public void test05(){
		File file = new File("d:/testIO/1.txt");
		file.delete();
		
		File dir = new File("d:/testIO");
		dir.delete();
	}
	
	@Test
	public void test04(){
		File file = new File("d:/testIO/a.txt");
		file.delete();
	}
	@Test
	public void test03(){
		File file = new File("d:/testIO");
		if(file.isFile()){
			System.out.println(file+"是一个文件。");
		}else if(file.isDirectory()){
			System.out.println(file + "是一个文件夹");
		}
	}
	@Test
	public void test02(){
		File file = new File("d:/testIO/a.txt");
		System.out.println("文件名:" + file.getName());
		System.out.println("文件大小:" + file.length());
		System.out.println("文件的绝对路径:" + file.getAbsolutePath());
		System.out.println("文件的父目录:" + file.getParent());
	}
	@Test
	public void test01(){
		File file = new File("d:/testIO/a.txt");
		try {
			if(!file.exists()){
				file.createNewFile();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}
}

到这里关于输入输出的File就说完了