JAVA之IO--FILE(一)

File类

​ 表示为文件和路径名的抽象表示,也就是系统中文件或文件夹在Java中表示形式,File不能直接操作文件,只能表示文件,如果需要操作文件,后面会使用到流。

1.File中的常量

  • pathSeparator:与系统有关的的路径分隔符
  • separator:与系统有关的名称分隔符
    1
    2
    3
    4
    5
    @Test
    public void fileConstant() {
    System.out.println(File.pathSeparator); //windows --> ; linux --> :
    System.out.println(File.separator); //windows \ linux /
    }

2.绝对路径和相对路径

​ 表示一个文件的位置信息,绝对路径表示从盘符开始表示其位置。绝对路径表示相对于一个位置,其位置的信息。

1
2
3
4
5
6
7
8
9
10
11
12
/**
* 比如在你的电脑上存在 d:/file/parent/test/test.txt
**/
@Test
public void filePath() {
/**绝度路径**/
File file1 = new File("d:/file/parent/test");
/**相对路径**/
File file2 = new File(new File("d:/file/parent/test"),"text.txt");
File file3 = new File("abc.txt");//表示当前工程
}

3.File的简单使用(常用的方法)

1.文件名相关的操作

getName():文件名称
getPath():路径名,如果采用绝对路径那么返回的就是绝对路径,如果采用相对路径构建的File那么就是相对路径
getAbsoluteFile():绝对路径对应的文件
getAbsolutePath:绝对路径
getParent():父目录,相对路径的父目录,可能为null
renameTo(File newName);重命名

1
2
3
4
5
6
7
8
9
10
11
@Test
public void fileTest() {
//表示工程目录下的pom.xml
File file = new File("pom.xml");
System.out.println("文件名称:"+file.getName());
System.out.println("绝对路径:"+file.getAbsolutePath());
System.out.println("路径:"+file.getPath()); //如果为绝度路径,返回绝对路径,否则相对路径
System.out.println("上级目录:"+file.getParent()); //相对路径返回null
System.out.println("绝对文件:"+file.getAbsoluteFile());
System.out.println("绝对文件的上级目录:"+file.getAbsoluteFile().getParent()); //可以返回为上级目录
}

#####2.判断信息操作
exists():是否存在
canWrite():能否写入
canRead():能否进行读取
isFile():判断是否为文件
isDirectory():判断是否为文件夹
isAbsolute():消除平台差异,windows是以盘符开头,其它以/

1
2
3
4
5
6
7
8
9
10
@Test
public void fileTest02() {
File file = new File("pom.xml");
System.out.println("文件是否存在:"+file.exists());
System.out.println("文件是否可读:"+file.canRead());
System.out.println("文件是否可写:"+file.canWrite());
System.out.println("是否为文件:"+file.isFile());
System.out.println("是否为文件夹:"+file.isDirectory());
System.out.println("是否为绝对路径构建:"+file.isAbsolute());
}

#####3.长度
length():文件的大小

#####4.创建和删除
createNewFile():不存在创建新文件
delete():删除文件
static createTempFile(前缀3个字节,后缀默认.temp) 在默认的临时空间中创建临时文件
static createTempFile(前缀3个字节,后缀默认.temp,目录) 在目录中创建临时文件
deleteOnExit() 退出虚拟机删除,常用语删除临时文件

1
2
3
4
5
6
7
8
9
10
11
12
13
@Test
public void fileTest03() throws IOException {
File file = new File("test.txt");
if(!file.exists()) {
file.createNewFile(); //文件不存在创建文件
}
file.delete();//删除文件
File fileTemp1 = File.createTempFile("abc", ".temp");//创建临时文件
File fileTemp2 = File.createTempFile("abc", ".temp", new File("."));
fileTemp1.deleteOnExit(); //退出时删除
fileTemp2.deleteOnExit();
}

#####5.操作目录
mkdir() 创建目录,但是父目录不存在不能创建
mkdirs() 创建目录,父目录不存在也同时创建
list() : 返回的为字符串数组,表示文件的字符串表示
listFiles() :返回目录下的所有的字符串
listFiles(FileFilter):进行过滤器过滤
static listRoots(): 根目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Test
public void fileTest04() throws IOException {
File file1 = new File("abc/ccc");
file1.mkdir();//创建目录,必须保证父路径存在
file1.mkdirs();//创建目录,父目录不存在,同时创建
//创建文件
for(int i = 0;i<5;i++) {
File file = new File(file1,i+".txt");
if(!file.exists()) {
file.createNewFile();
}
}
String[] fileNames = file1.list();//返回目录中的文件字符串表示
System.out.println(Arrays.toString(fileNames));
File[] listFiles = file1.listFiles();
System.out.println(Arrays.toString(listFiles));
/**进行过滤器**/
File[] listFiles2 = file1.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith("4.txt");
}
});
System.out.println(Arrays.toString(listFiles2));
File[] listRoots = File.listRoots(); //获取跟目录
System.out.println(Arrays.toString(listRoots));
}