一个File类的对象,表示了磁盘上的文件或目录。
File类提供了与平台无关的方法来对磁盘上的文件或目录进行操作。
————
Java API:
————
java.io
类 File
java.lang.Object
java.io.File
所有已实现的接口:
Serializable, Comparable<File>
public class File
extends Object
implements Serializable, Comparable<File>
文件和目录路径名的抽象表示形式。
用户界面和操作系统使用与系统相关的路径名字符串 来命名文件和目录。此类呈现分层路径名的一个抽象的、与系统无关的视图。抽象路径名 有两个组件:
一个可选的与系统有关的前缀 字符串,比如盘符,”/” 表示 UNIX 中的根目录,”” 表示 Microsoft Windows UNC 路径名,以及
零个或更多字符串名称 的序列。
除了最后一个,抽象路径名中的每个名称代表一个目录;最后一个名称既可以代表目录,也可以代表文件。空的 抽象路径名没有前缀和名称序列。
路径名字符串与抽象路径名之间的转换与系统有关。将抽象路径名转换为路径名字符串时,每个名称与下一个名称之间由单个默认分隔符字符 隔开。默认名称分隔符由系统属性 file.separator 定义,也可以从此类的公共静态字段 separator 和 separatorChar 中得到。将路径名字符串转换为抽象路径名时,可以使用默认名称分隔符或者受基础系统支持的其他任何名称分隔符来分隔其中的名称。
无论是抽象路径名还是字符串路径名,都可以是绝对 路径名或相对 路径名。绝对路径名是完整的路径名,不需要任何其他信息就可以定位自身表示的文件。相反,相对路径名必须使用来自其他路径名的信息进行解释。默认情况下,java.io 包中的类总是根据当前用户目录来分析相对路径名。此目录由系统属性 user.dir 指定,通常是 Java 虚拟机的调用目录。
前缀的概念用于处理 UNIX 平台的根目录,以及 Microsoft Windows 平台上的盘符、根目录和 UNC 路径名,如下所示:
对于 UNIX 平台,绝对路径名的前缀始终是 “/”。相对路径名没有前缀。表示根目录的绝对路径名的前缀为 “/” 并且没有名称序列。
对于 Microsoft Windows 平台,包含盘符的路径名的前缀由驱动器名和一个 “:” 组成:如果路径名是绝对路径名,后面可能跟着 “//”。UNC 路径名的前缀是 “”;主机名和共享名是名称序列中的前两个名称。没有指定驱动器的相对路径名无前缀。
File 类的实例是不可变的;也就是说,一旦创建,File 对象表示的抽象路径名将永不改变。
从以下版本开始:
JDK1.0
——————————————————————————-
——————————————————————————-
构造方法摘要
File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File(String pathname)
通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。
File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
File(URI uri)
通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。
——————————————————————————-
——————————————————————————-
1、创建文件和文件夹
————
Java API:
————
createNewFile
public boolean createNewFile()
throws IOException
当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。检查文件是否存在,如果不存在则创建该文件,这是单个操作,对于其他所有可能影响该文件的文件系统活动来说,该操作是原子的。
注:此方法不应 用于文件锁定,因为所得到的协议可能无法可靠地工作。应该使用 FileLock 机制替代。
返回:
如果指定的文件不存在并成功地创建,则返回 true;如果指定的文件已经存在,则返回 false
抛出:
IOException – 如果发生 I/O 错误
SecurityException – 如果存在安全管理器,且其 SecurityManager.checkWrite(java.lang.String) 方法拒绝对文件进行写入访问
从以下版本开始:
1.2
——————————————————————————-
Demo1: FileDemo.java
创建一个文件,简单起见,异常由JVM处理
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File f
=
new
File(
”
1.txt
”
);
7
f.createNewFile();
8
}
9
10
}
11
——————————————————————————-
——————————————————————————-
————
Java API:
————
mkdir
public boolean mkdir()
创建此抽象路径名指定的目录。
返回:
当且仅当已创建目录时,返回 true;否则返回 false
抛出:
SecurityException – 如果存在安全管理器,且其 SecurityManager.checkWrite(java.lang.String) 方法不允许创建指定的目录
——————————————————————————-
——————————————————————————-
Demo2:在当前文件夹中创建一个文件夹test
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File f
=
new
File(
”
test
”
);
7
f.mkdir();
8
}
9
}
10
——————————————————————————-
——————————————————————————-
Demo3:创建一个根目录下的文件夹test
方法名:mkdir()
注意:’/’要使用转义字符’//’来代替
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File f
=
new
File(
”
c://test
”
);
7
f.mkdir();
8
}
9
}
10
————
Java API:
————
mkdirs
public boolean mkdirs()
创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。注意,如果此操作失败,可能已成功创建了一些必需的父目录。
返回:
当且仅当已创建该目录以及所有必需的父目录时,返回 true;否则返回 false
抛出:
SecurityException – 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法不允许验证指定目录和所有必需的父目录是否存在;或者 SecurityManager.checkWrite(java.lang.String) 方法不允许创建指定的目录和所有必需的父目录
——————————————————————————-
——————————————————————————-
Demo4:创建一个根目录下的文件夹test
方法名:mkdirs()
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File f
=
new
File(
”
c://test//test//test
”
);
7
f.mkdir();
8
}
9
10
}
——————————————————————————-
——————————————————————————-
Demo5:在当前目录下创建多级子目录(注意格式,先文件名,再’//’)
如果是(//test//test)格式,则会在当前文件所在的盘符的根目录下创建目录
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File f
=
new
File(
”
c://test//test//test
”
);
7
f.mkdir();
8
}
9
10
}
11
12
——————————————————————————-
——————————————————————————-
Demo6:直接在某特定目录下新建文件
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File f
=
new
File(
”
c://test//test//1.txt
”
);
7
f.createNewFile();
8
}
9
10
}
11
——————————————————————————-
——————————————————————————-
2、创建跨平台代码
——————————————————————————-
字段摘要
static String pathSeparator
与系统有关的路径分隔符字符,出于方便考虑,它被表示为一个字符串。
static char pathSeparatorChar
与系统有关的默认路径分隔符字符。
static String separator
与系统有关的默认名称分隔符,出于方便考虑,它被表示为一个字符串。
static char separatorChar
与系统有关的默认名称分隔符
——————————————————————————-
使用下面的构造方法:
————
Java API:
————
File
public File(File parent,
String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
如果 parent 为 null,则创建一个新的 File 实例,这与调用给定 child 路径名字符串的单参数 File 构造方法的效果一样。
否则,parent 抽象路径名用于表示目录,而 child 路径名字符串用于表示目录或文件。如果 child 路径名字符串是绝对路径名,则用与系统有关的方式将它转换成一个相对路径名。如果 parent 是空抽象路径名,则新的 File 实例是通过将 child 转换成抽象路径名并根据与系统有关的默认目录来分析结果而创建的。否则,将每个路径名字符串转换成一个抽象路径名,并根据父抽象路径名分析子抽象路径名。
参数:
parent – 父抽象路径名
child – 子路径名字符串
抛出:
NullPointerException – 如果 child 为 null
——————————————————————————-
Demo7:直接在某特定目录下新建文件,而且是跨平台的
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File fDir
=
new
File(File.separator);
7
String strFile
=
”
test
”
+
File.separator
8
+
”
test
”
+
File.separator
9
+
”
1.txt
”
;
10
File f
=
new
File(fDir, strFile);
11
12
f.createNewFile();
13
}
14
15
}
16
——————————————————————————-
运行结果:在X:/test/test下创建了1.txt文件
——————————————————————————-
————
Java API:
————
delete
public boolean delete()
删除此抽象路径名表示的文件或目录。如果此路径名表示一个目录,则此目录必须为空才能删除。
返回:
当且仅当成功删除文件或目录时,返回 true;否则返回 false
抛出:
SecurityException – 如果存在安全管理器,且其 SecurityManager.checkDelete(java.lang.String) 方法拒绝对文件进行删除访问
3、删除文件
——————————————————————————-
——————————————————————————-
——————————————————————————-
Demo8:删除某个文件
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File fDir
=
new
File(File.separator);
7
String strFile
=
”
test
”
+
File.separator
8
+
”
test
”
+
File.separator
9
+
”
1.txt
”
;
10
File f
=
new
File(fDir, strFile);
11
12
f.delete();
13
}
14
15
}
16
——————————————————————————-
——————————————————————————-
————
Java API:
————
deleteOnExit
public void deleteOnExit()
在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。仅在虚拟机正常终止时,才会试图执行删除操作,这在 Java Language Specification 中已定义。
一旦已经请求执行删除操作,就无法取消该请求。所以应小心使用此方法。
注:此方法不应 用于文件锁定,因为所得到的协议可能无法可靠地工作。应该使用 FileLock 设施替代。
抛出:
SecurityException – 如果存在安全管理器,且其 SecurityManager.checkDelete(java.lang.String) 方法拒绝对文件进行删除访问
从以下版本开始:
1.2
另请参见:
delete()
——————————————————————————-
Demo9:程序结束后删除某个文件
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File fDir
=
new
File(File.separator);
7
String strFile
=
”
test
”
+
File.separator
8
+
”
test
”
+
File.separator
9
+
”
1.txt
”
;
10
File f
=
new
File(fDir, strFile);
11
12
f.createNewFile();
13
14
f.deleteOnExit();
15
Thread.sleep(
3000
);
//
程序休眠3秒
16
}
17
18
}
19
——————————————————————————-
运行结果:程序运行,创建文件,然后休眠3秒,程序结束,删除文件。
——————————————————————————-
4、创建临时文件:
————
Java API:
————
createTempFile
public static File createTempFile(String prefix,
String suffix)
throws IOException
在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。调用此方法等同于调用 createTempFile(prefix, suffix, null)。
参数:
prefix – 用于生成文件名的前缀字符串;至少必须是三个字符长
suffix – 用于生成文件名的后缀字符串;可能是 null,在这种情况下,将使用后缀 “.tmp”
返回:
表示新创建的空文件的抽象路径名
抛出:
IllegalArgumentException – 如果 prefix 参数包含少于三个的字符
IOException – 如果无法创建文件
SecurityException – 如果存在安全管理器,且其 SecurityManager.checkWrite(java.lang.String) 方法不允许创建文件
从以下版本开始:
1.2
——————————————————————————-
Demo10:创建临时文件
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
for
(
int
i
=
0
; i
<
5
; i
++
)
{
7
File.createTempFile(
”
tempfile
”
,
”
.tmp
”
);
8
}
9
}
10
11
}
——————————————————————————-
运行结果:在默认的Temp文件夹下创建5个临时文件
——————————————————————————-
——————————————————————————-
Demo11:创建临时文件,然后程序结束后删除临时文件
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
for
(
int
i
=
0
; i
<
5
; i
++
)
{
7
File f
=
File.createTempFile(
”
tempfile
”
,
”
.tmp
”
);
8
f.deleteOnExit();
9
}
10
Thread.sleep(
3000
);
11
}
12
13
}
——————————————————————————-
——————————————————————————-
5、list方法:
————
Java API:
————
list
public String[] list()
返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。
如果此抽象路径名并不表示一个目录,则此方法将返回 null。否则,为目录中的每个文件或目录返回一个字符串数组。表示目录本身及其父目录的名称不包括在结果中。每个字符串是一个文件名,而不是一条完整路径。
不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。
返回:
由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。如果目录为空,则数组也将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。
抛出:
SecurityException – 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法拒绝对目录进行读取访问
——————————————————————————-
——————————————————————————-
Demo12:列出文件夹下面的所有文件名和文件夹名
——————————————————————————-
1
import
java.io.File;
2
3
public
class
FileDemo
{
4
5
public
static
void
main(String[] args)
throws
Exception
{
6
File fDir
=
new
File(File.separator);
7
String strFile
=
”
test
”
+
File.separator
8
+
”
test
”
;
9
File f
=
new
File(fDir, strFile);
10
String[] names
=
f.list();
11
12
for
(
int
i
=
0
; i
<
names.length; i
++
)
{
13
System.out.println(names[i]);
14
}
15
}
16
17
}
18
——————————————————————————-
——————————————————————————-
6、过滤显示文件
————
Java API:
————
list
public String[] list(FilenameFilter filter)
返回由包含在目录中的文件和目录的名称所组成的字符串数组,这一目录是通过满足指定过滤器的抽象路径名来表示的。此方法的行为与 list() 方法相同,除了所返回数组中的字符串必须满足过滤器。如果给定 filter 为 null,则接受所有名称。否则,当且仅当在此抽象路径名和它所表示的目录中的文件名或目录名上调用过滤器的 FilenameFilter.accept(java.io.File, java.lang.String) 方法返回 true 时,该名称才满足过滤器。
参数:
filter – 文件名过滤器
返回:
由此抽象路径名所表示的目录中的文件和目录的字符串数组,该字符串被给定 filter 所接受。如果目录为空,或者没有名称被过滤器接受,则该数组将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。
抛出:
SecurityException – 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法拒绝对目录进行读取访问
————
Java API:
————
java.io
接口 FilenameFilter
public interface FilenameFilter
实现此接口的类实例可用于过滤器文件名。Abstract Window Toolkit 的文件对话框组件使用这些实例过滤 File 类的 list 方法中的目录清单。
从以下版本开始:
JDK1.0
另请参见:
FileDialog.setFilenameFilter(java.io.FilenameFilter), File, File.list(java.io.FilenameFilter)
方法摘要
boolean accept(File dir, String name)
测试指定文件是否应该包含在某一文件列表中。
方法详细信息
accept
boolean accept(File dir,
String name)
测试指定文件是否应该包含在某一文件列表中。
参数:
dir – 被找到的文件所在的目录。
name – 文件的名称。
返回:
当且仅当该名称应该包含在文件列表中时返回 true;否则返回 false。
——————————————————————————-
String的方法IndexOf的API:
————
Java API:
————
indexOf
public int indexOf(String str)
返回第一次出现的指定子字符串在此字符串中的索引。返回的整数是
this.startsWith(str, k)
为 true 的最小值 k。
参数:
str – 任意字符串。
返回:
如果字符串参数作为一个子字符串在此对象中出现,则返回第一个这样的子字符串的第一个字符的索引;如果它不作为一个子字符串出现,则返回 -1。
——————————————————————————-
——————————————————————————-
Demo13:列出文件夹下面的所有特定后缀名的文件名,如.java
1
——————————————————————————-
2
import
java.io.
*
;
3
4
public
class
FileDemo
{
5
6
public
static
void
main(String[] args)
throws
Exception
{
7
File fDir
=
new
File(File.separator);
8
String strFile
=
”
test
”
+
File.separator
9
+
”
test
”
;
10
File f
=
new
File(fDir, strFile);
11
String[] names
=
f.list(
new
FilenameFilter()
{
12
public
boolean
accept(File dir, String name)
{
13
return
name.indexOf(
”
.java
”
)
!=
–
1
;
14
}
15
}
);
16
17
for
(
int
i
=
0
; i
<
names.length; i
++
)
{
18
System.out.println(names[i]);
19
}
20
}
21
22
}
23
——————————————————————————-
运行结果:列出*.java文件
——————————————————————————-