File(十七)


File(十七)

File对象表示路径,可以是文件,可以是文件夹,该路径可存在,可不存在。

绝对路径:绝对路径是带盘符的。

相对路径:相对路径不带盘符,默认到当前项目下去找。

构造方法

1
2
3
4
5
6
7
8
9
10
11
//格式1
public File(String pathname)
把字符串表示的路径变成File对象

//格式2
public File(String parent,String child)
把父级路径和子级路径进行拼接

//格式3
public File(File parent,String child)
//把父级路径对应文件对象和子级路径进行拼接

范例

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
import java.io.File;

public class Test{
public static void main(String[] args){
//public File(String pathname)
String pathname="d:\\javafiletest\\a.txt";
File file1=new File(pathname);
System.out.println(file1);

//public File(String parent,String child)
String parent1="d:\\javafiletest";
String child1="a.txt";
File file2=new File(parent1,child1);
System.out.println(file2);

//public File(File parent,String child)
File file3=new File("d:\\javafiletest");
String child2="a.txt";
File file4=new File(file3,child2);
System.out.println(file4);
}
}
/*
d:\javafiletest\a.txt
d:\javafiletest\a.txt
d:\javafiletest\a.txt
*/

常用成员方法

判断

isDirectory

格式

public boolean isDirectory()

说明:判断此路径名表示的File是否为文件夹

isFile

格式

public boolean isFile()

说明:判断此路径名表示的File是否为文件

exits

格式

public boolean exits()

说明:判断此路径名表示的File是否存在

范例

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
import java.io.File;

public class Test{
public static void main(String[] args){
File file=new File("d:\\javafiletest\\a.txt");
System.out.println("isDirectory:"+file.isDirectory());//false
System.out.println("isFile:"+file.isFile());//true
System.out.println("exists:"+file.exists());//true
System.out.println();

File file1=new File("d:\\javafiletest\\b");
System.out.println("isDirectory:"+file1.isDirectory());//true
System.out.println("isFile:"+file1.isFile());//false
System.out.println("exists:"+file1.exists());//true
System.out.println();

File file2=new File("d:\\javafiletest\\c");
System.out.println("isDirectory:"+file2.isDirectory());//false
System.out.println("isFile:"+file2.isFile());//false
System.out.println("exists:"+file2.exists());//false
}
}
/*
isDirectory:false
isFile:true
exists:true

isDirectory:true
isFile:false
exists:true

isDirectory:false
isFile:false
exists:false
*/

获取

length

格式

public long length()

说明:返回文件的大小(单位字节),无法获得文件夹的大小,若使用该方法返回文件夹大小,会返回错误值

getAbsolutePath

格式

public String getAbsolutePath()

说明:返回文件的绝对路径

getPath

格式

public String getPath()

说明:返回定义文件时使用的路径

getName

格式

public String getName()

说明:返回文件的名称,带后缀,若返回文件夹,则不带后缀,就是文件夹的名字

lastModified

格式

public long lastModified()

说明:返回文件的最后修改时间

范例

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
import java.io.File;
public class Test{
public static void main(String[] args){
File file=new File("D:\\javafiletest\\a.txt");
File directory=new File("D:\\javafiletest\\b");
System.out.println("length方法");
System.out.println(file.length()+"字节");
System.out.println(directory.length()+"字节");
System.out.println();

System.out.println("getAbsolutePath方法");
File file1=new File("practice\\b.txt");
System.out.println(file.getAbsoluteFile());
System.out.println(file1.getAbsoluteFile());
System.out.println();

System.out.println("getPath方法");
System.out.println(file.getPath());
System.out.println(file1.getPath());
System.out.println();

System.out.println("getName方法");
System.out.println(file.getName());
System.out.println(directory.getName());
System.out.println();

System.out.println("lastModified方法");
int l=(int)file.lastModified();
System.out.println(l);
}
}
/*
length方法
7字节
0字节

getAbsolutePath方法
D:\javafiletest\a.txt
D:\Javacode\practice\practice\b.txt

getPath方法
D:\javafiletest\a.txt
practice\b.txt

getName方法
a.txt
b

lastModified方法
389686339
*/

创建

createNewFile

格式

public boolean createNewFile()

说明:创建一个新的空的文件

细节:

  1. 若当前路径表示的文件是不存在的,则创建成功,方法返回true
  2. 若当前路径表示的文件是存在的,则创建失败,方法返回false
  3. 若父级路径是不存在的,那么方法会有异常IOException
  4. createNewfFile方法创建的一定是文件,若路径中不包含后缀名,则创建一个没有后缀的文件

mkdir

格式

public boolean mkdir()

说明:创建单级文件夹

细节

  1. Windows当中路径是唯一的,若当前路径已存在,则创建失败,返回false
  2. mkdir方法只能创建单级文件夹,无法创建多级文件夹

mkdirs

格式

public boolean mkdirs()

说明:创建多级文件夹

范例

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
//d:\javafiletest文件夹初始为空
import java.io.File;
import java.io.IOException;

public class Test{
public static void main(String[] args) throws IOException {
System.out.println("createNewFile方法");
File file1=new File("D:\\javafiletest\\a.txt");
boolean flag1=file1.createNewFile();
System.out.println(flag1);

File file2=new File("D:\\javafiletest\\a.txt");
boolean flag2=file2.createNewFile();
System.out.println(flag2);

File file3=new File("D:\\javafiletest\\a");
boolean flag3=file3.createNewFile();
System.out.println(flag3);

File file4=new File("D:\\aaa\\a.txt");
boolean flag4=file4.createNewFile();
System.out.println(flag4);
}
}
/*
createNewFile方法
true
false
true
Exception in thread "main" java.io.IOException: 系统找不到指定的路径。
at java.io.WinNTFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1012)
at Test.main(Test.java:20)
*/
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
////d:\javafiletest文件夹初始为空
import java.io.File;
import java.io.IOException;

public class Test{
public static void main(String[] args) throws IOException {
System.out.println("mkdir方法");
File file5=new File("D:\\javafiletest\\a");
System.out.println(file5.mkdir());

File file6=new File("D:\\javafiletest\\b\\a");
System.out.println(file6.mkdir());
System.out.println();

System.out.println("mkdirs方法");
File file7=new File("D:\\javafiletest\\b\\a");
System.out.println(file7.mkdirs());

}
}
/*
mkdir方法
true
false

mkdirs方法
true
*/

删除

delete

格式

public boolean delete()

说明:删除文件、空文件夹

细节

  1. 若删除的是文件,则直接删除,不走回收站
  2. 若删除的是空文件夹,则直接删除,不走回收站
  3. 若删除的是有内容的文件夹,则删除失败
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
/*
d:\\javafiletest文件下有三条路径
‪D:\javafiletest\a
‪D:\javafiletest\b\b.txt
‪D:\javafiletest\c.txt
*/
import java.io.File;
public class Test{
public static void main(String[] args){
System.out.println("delete方法");
File file1=new File("D:\\javafiletest\\a");
System.out.println(file1.delete());

File file2=new File("D:\\javafiletest\\c.txt");
System.out.println(file2.delete());

File file3=new File("D:\\javafiletest\\b");
System.out.println(file3.delete());
}
}
/*
delete方法
true
true
false
*/

获取并遍历

listFiles

格式

public File[] listFiles()

说明:获取当前该路径下所有内容

细节

  • 当调用者File表示的路径不存在时,返回null
  • 当调用者File表示的路径是文件时,返回null
  • 当调用者File表示的路径是一个空文件夹时,返回一个长度为0的数组
  • 当调用者File表示的路径是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
  • 当调用者File表示的路径是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
  • 当调用者File表示的路径是需要权限才能访问的文件夹时,返回null

范例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.File;
public class Test{
public static void main(String[] args){
System.out.println("listFiles方法");
File file=new File("D:\\javafiletest");
File[] files=file.listFiles();
for (File file1:files){
System.out.println(file1);
}
}
}
/*
listFiles方法
D:\javafiletest\a
D:\javafiletest\b
D:\javafiletest\c.txt
D:\javafiletest\d.txt
*/

范例

例1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

/*
true
*///需求:在当前模块下的aaa文件夹中创建一个a.txt文件
import java.io.File;
import java.io.IOException;

public class Test{
public static void main(String[] args) throws IOException {
File file=new File("aaa");
System.out.println(file.mkdirs());
File file1=new File(file,"a.txt");
boolean flag=file1.createNewFile();
if(flag){
System.out.println("创建成功");
}else {
System.out.println("创建失败");
}
}
}
/*
创建成功
*/

例2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//需求:定义一个方法寻找d:\\javafiletest文件夹中,是否存在以.txt为结尾的文件(不考虑子文件夹)
import java.io.File;

public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest");
if(findtxt(file)){
System.out.println("存在");
}else {
System.out.println("不存在");
}
}
public static boolean findtxt(File file){
File[] files=file.listFiles();
for (File f:files){
if(f.isFile()&&f.getName().endsWith(".txt")){
return true;
}
}
return false;
}
}

例3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//需求:找到d:\\javafiletest文件夹中所有以.txt结尾的文件
import java.io.File;

public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest");
findtxt(file);
}
public static void findtxt(File file){
File[] files=file.listFiles();
for (File f:files){
if(f.isDirectory()){
findtxt(f);
}else{
if(f.getName().endsWith(".txt")){
System.out.println(f);
}
}
}
}
}

例4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//需求:删除一个多级文件夹
import java.io.File;

public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest\\test");
delete(file);
}
public static void delete(File file){
File[] files=file.listFiles();
for (File f:files){
if(f.isFile()){
f.delete();
}else {
delete(f);
}
}
file.delete();
}
}

例5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//计算文件总大小
import java.io.File;

public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest");
System.out.println(statistic(file));
}
public static long statistic(File file){
File[] files=file.listFiles();
long sum=0;
for(File f:files){
if(f.isFile()){
sum+=f.length();
}else {
sum+=statistic(f);
}
}
return sum;
}
}
//36987

例6

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
/*
需求:统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)
打印格式:
txt:3个
md:4个
doc:5个
*/
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Test{
public static void main(String[] args){
File file = new File("d:\\javafiletest");
HashMap<String,Integer> hm=getCount(file);
Set<Map.Entry<String,Integer>> entries=hm.entrySet();
for (Map.Entry<String,Integer> entry:entries){
System.out.println(entry.getKey()+":"+entry.getValue());
}

}
public static HashMap<String,Integer> getCount(File file){
HashMap<String,Integer> hm=new HashMap<>();
File[] files=file.listFiles();
for (File f:files) {
//文件
if(f.isFile()){
String[] splits=f.getName().split("\\.");
int length=splits.length;
if(length!=1){
String s=splits[splits.length-1];
if(hm.containsKey(s)){
int count=hm.get(s);
count++;
hm.put(s,count);
}else {
hm.put(s,1);
}
}
}
//文件夹
else {
HashMap<String,Integer> hmSon=getCount(f);
Set<Map.Entry<String,Integer>> entries=hmSon.entrySet();
for (Map.Entry<String,Integer> entry:entries){
String key=entry.getKey();
int value=entry.getValue();
if(hm.containsKey(key)){
int i=hm.get(key);
i=i+value
hm.put(key,i);
}else{
hm.put(key,value);
}
}
}
}
return hm;
}
}
/*
txt:7
xlsx:3
md:2
doc:2
*/

Author: ljs
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source ljs !
评论
  TOC