File类的使用

java.io.File类:文件和文件目录路径的抽象表示形式,与平台无关

File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)

File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。

想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。

File对象可以作为参数传递给流的构造器

路径分隔符

路径中的每级目录之间用一个路径分隔符隔开。

路径分隔符和系统有关:windows和DOS系统默认使用“\”来表示 UNIX和URL使用“/”来表示

Java程序支持跨平台运行,因此路径分隔符要慎用。为了解决这个隐患,File类提供了一个常量: public static final String separator。根据操作系统,动态的提供分隔符

File类的构造器

  • public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径。

    • 绝对路径:是一个固定的路径,从盘符开始
    • 相对路径:是相对于某个位置开始
  • public File(String parent,String child) 以parent为父路径,child为子路径创建File对象。

  • public File(File parent,String child) 根据一个父File对象和子文件路径创建File对象

File类的常用方法-获取功能

  • getAbsolutePath():获取绝对路径
  • getPate():获取路径
  • getName():获取名称
  • getParent():获取上层文件目录路径。若无,返回null
  • length():获取文件长度(即:字节数)。不能获取目录的长度。
  • lastModified():获取最后一次的修改时间,毫秒值

  • list():获取指定目录下的所有文件或者文件目录的名称数组
  • listFiles():获取指定目录下的所有文件或者文件目录的File数组

File类的常用方法-重命名功能

  • renameTo(File dest):把文件重命名为指定的文件路径
    • 比如:file1.renameTo(file2)为例
    • 要想保证返回true,需要file1在硬盘中是存在的,且file2不能在硬盘中存在。

File类的常用方法-判断功能

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

## File类的常用方法-创建和删除功能

  • delete():删除文件或者文件夹 删除注意事项:Java中的删除不走回收站。

  • createNewFile() :创建文件。若文件存在,则不创建,返回false

  • mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。

  • mkdirs() :创建文件目录。如果此文件目录存在,就不创建了。如果上层文件目录不存在,一并创建。

注意

相对路径在IDEA和Eclipse中使用的区别?

  • IDEA

    • 如果使用单元测试方法,使用相对路径基于当前的Moudule的。
    • 如果使用mian()测试,使用相对路径基于当前Project的。
  • Eclipse

    • 单元测试方法还是main(),相对于路径都是基于当前Project的。
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
import org.junit.Test;

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

/**
* File类的使用
* <p>
* 1.File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)
* 2.File类声明在java.io包下
*/
public class FileTest {
/**
* 如何创建File类的实例
*/

@Test
public void test1() {

//构造器1
File file = new File("hello.txt");//相对路径
File file2 = new File("C:\\Data\\IntelliJ IDEA Work Space\\IO\\he.txt");

System.out.println(file);
System.out.println(file2);

//构造器2
File file3 = new File("C:\\Data\\IntelliJ IDEA Work Space\\IO", "IO");
System.out.println(file3);

//构造器3
File file4 = new File(file3, "hi.txt");
System.out.println(file4);
}

/**
* getAbsolutePath():获取绝对路径
* getPate():获取路径
* getName():获取名称
* getParent():获取上层文件目录路径。若无,返回null
* length():获取文件长度(即:字节数)。不能获取目录的长度。
* lastModified():获取最后一次的修改时间,毫秒值
* <p>
* list():获取指定目录下的所有文件或者文件目录的名称数组
* listFiles():获取指定目录下的所有文件或者文件目录的File数组
*/
@Test
public void test2() {
File file1 = new File("hello.txt");
File file2 = new File("C:\\Data\\IntelliJ IDEA Work Space\\IO\\he.txt");


System.out.println(file1.getAbsoluteFile());
System.out.println(file1.getPath());
System.out.println(file1.getName());
System.out.println(file1.getParent());
System.out.println(file1.length());
System.out.println(file1.lastModified());

System.out.println();


System.out.println(file2.getAbsoluteFile());
System.out.println(file2.getPath());
System.out.println(file2.getName());
System.out.println(file2.getParent());
System.out.println(file2.length());
System.out.println(file2.lastModified());

}

@Test
public void test3() {
File file = new File("C:\\Data\\IntelliJ IDEA Work Space\\IO");

String[] list = file.list();
for (String s : list) {
System.out.println(s);
}

System.out.println();

File[] files = file.listFiles();
for (File f : files) {
System.out.println(f);
}
}

/**
* renameTo(File dest):把文件重命名为指定的文件路径
* 比如:file1.renameTo(file2)为例
* 要想保证返回true,需要file1在硬盘中是存在的,且file2不能在硬盘中存在。
*/
@Test
public void test4() {
File file1 = new File("hello.txt");
File file2 = new File("C:\\Data\\IntelliJ IDEA Work Space\\IO\\hello.txt");


boolean renameTo = file1.renameTo(file2);
System.out.println(renameTo);


}

/**
* isDirectory():判断是否是文件目录
* isFile() :判断是否是文件
* exists() :判断是否存在
* canRead() :判断是否可读
* canWrite() :判断是否可写
* isHidden() :判断是否隐藏
*/
@Test
public void test5() {
File file1 = new File("hello.txt");

System.out.println(file1.isDirectory());
System.out.println(file1.isFile());
System.out.println(file1.exists());
System.out.println(file1.canRead());
System.out.println(file1.canWrite());
System.out.println(file1.isHidden());

System.out.println();

File file2 = new File("c:\\Data");
System.out.println(file2.isDirectory());
System.out.println(file2.isFile());
System.out.println(file2.exists());
System.out.println(file2.canRead());
System.out.println(file2.canWrite());
System.out.println(file2.isHidden());

}

/**
* 创建硬盘中对应的文件或文件目录
* createNewFile() :创建文件。若文件存在,则不创建,返回false
* mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
* mkdirs() :创建文件目录。如果此文件目录存在,就不创建了。如果上层文件目录不存在,一并创建
* <p>
* 删除磁盘中的文件或文件目录
* delete():删除文件或者文件夹
* 删除注意事项:Java中的删除不走回收站。
*/
@Test
public void test6() throws IOException {
File file1 = new File("hi.txt");
if (!file1.exists()) {
//文件的创建
file1.createNewFile();
System.out.println("创建成功");
} else {//文件存在
file1.delete();
System.out.println("删除成功");
}
}

@Test
public void test7() {
//文件目录的创建
File file1 = new File("d:\\io\\io1\\io3");

boolean mkdir = file1.mkdir();
if (mkdir) {
System.out.println("创建成功1");
}

File file2 = new File("d:\\io\\io1\\io4");

boolean mkdir1 = file2.mkdirs();
if (mkdir1) {
System.out.println("创建成功2");
}
//要想删除成功,io4文件目录下不能有子目录或文件
File file3 = new File("D:\\io\\io1\\io4");
System.out.println(file3.delete());
}

}