1) java中的File类是为了操作文件,而不是文件中的内容,要操作文件中的内容需要使用FileInputStream等输入输出流
2) 创建文件
1. 创建单个文件
File f = new File("g.txt");
f.createNewFile();
2. 创建一级文件夹
File dir = new File("wenjiaja");
dir.mkdir();
3. 创建多级文件夹
File dirs = new File("e:"+File.separator+"c"+File.separator+"d");
//File dirs = new File("e:d1\\d2\\d3");
System.out.println(dirs.getAbsolutePath());
dirs.mkdirs();
两者效果相同,都是在e盘下创建c、d两级目录(推荐使用第一种,可以跨平台)
3) 判断文件是否存在、类型
1. 文件是否存在
f.exists()
2. 是否是文件
f.isFile()
3. 是否是文件夹
f.isDirectory()
4) 删除
1. 如果是单个文件或者最底层文件夹,直接删除
f.delete();
2. 如果是多级文件夹,则需要递归删除(先删除文件夹中的文件,再删除文件夹)
private void deleteDirs(File dirs) {
for(File f:dirs.listFiles())
{
if(true == f.isFile())
f.delete();
else
deleteDirs(f);
}
dirs.delete();
}
5) 获得文件信息
1. 获得文件总大小
f.length()
2. 获得文件的绝对路径
f.getAbsolutePath()
3. 获得文件名称
f.getName()
4. 获得文件的父文件夹
f.getParent()
注意:是按传入的路径看的,如果传入路径是相对路径,只有一个文件名,那么就会返回null
6) 获得所有文件
1. 显示系统中所有可用的盘(c、d、e)
File[] f = File.listRoots();
说明:静态方法,直接调用即可
2. 获得文件夹下所有文件的文件名(包括文件夹)
File f = new File("c:\\");
String[] names = f.list();
for(String name:names)
System.out.println(name);
3. 获得经过过滤的文件名称
File file = new File("c:\\");
String[] names = file.list(new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
if(name.endsWith(".log"))
return true;
else
return false;
}
});
FilenameFilter是一个接口,可以通过匿名内部类来实现
4. 获得文件夹下所有文件的File对象
File[] files = file.listFiles();
5. 获得文件夹及其子文件夹下的所有文件
public void getFile(File file)
{
if(file.isFile())
System.out.println(file.getAbsolutePath());
else
{
File[] fs = file.listFiles();
for(File f:fs)
getFile(f);
}
}
附注:
1)java中的相对路径
1. java创建File需要传入一个文件的路径,路径可以是绝对路径和相对路径。
2. 绝对路径很好理解,在windows下只要给出从盘符到所有级别文件夹的完整路径即可。
3. 相对路径指的就是jvm启动的路径,可以通过System.getProperty("user.dir")来获得。(假设有一java源文件Example.java在d盘根目录下,该文件不含package信息.我们进入命令行窗口,然后使用”d:”命令切换到d盘根目录下,然后用”javac Example.java”来编译此文件,编译无错后,会在d盘根目录下自动生成”Example.class”文件.我们在调用”java Example”来运行该程序.此时我们已经启动了一个jvm,这个jvm是在d盘根目录下被启动的,所以此jvm所加载的程序中File类的相对路径也就是相对这个路径的,即d盘根目录:D:\.同时” 当前用户目录”也是D:\.在System.getProperty(“user.dir”);系统变量”user.dir”存放的也是这个值.)
4. .\表示当前目录 File f = new File(".\\");
System.out.println(f.getAbsolutePath());
5. 在Eclipse中情况
Eclipse启动jvm都是在项目的根目录下启动的。比如有个项目叫做oa,完整路径为E:\work\java\code\oa,那么这个路径就是jvm的启动路径了,使用System.getProperty("user.dir"),输出的就是E:\work\java\code\oa
6. 在Tomcat中情况
在Tomcat中执行web应用,执行如下代码时:
File f = new File(".\\");
System.out.println(f.getAbsolutePath());
输出的是Tomcat的bin目录,说明Tomcat是在bin中启动jvm的,更确切的说是catalina.sh或c
atalina.bat
2) java中File类的分隔符
1. 在windows和linux下的路径分隔符是不一样的,如果使用同样的路径,跨平台使用时会抛异常
2 .比如要创建一个test.txt的文件
在windows下:
File file1 = new File ("C:\tmp\test.txt");
在Linux下:
File file2 = new File ("/tmp/test.txt");
所以为了考虑跨平台性,则应使用如下写法:
File myFile = new File("C:" + File.separator + "tmp" + File.separator, "test.txt");