关于文件File的笔记
File是java IO中很重要的类,可以获得和设置文件的属性,等等。
构造方法:
File(String pathname)文件或者目录路径
File(String parent,String child)
FIle(File parent,String child)
常用方法:
1、canRead()
2、canWrite()
3、boolean delete(),如果是目录且含子目录或者文件,则无法删除,而且对于一些特殊情况也无法删除。此方法没有异常抛出。
4、boolean exists()文件或者目录是否存在,new File()得到File对象并不代表文件或者目录实际存在,物理文件存在时才为true
5、getName()得到文件或者目录名,不包括父目录。
6、getParent(),获得目录,分别是:
(1)如果使用点“.”的相对路径创建文件,返回点“.”
(2)使用相对路径(没有用点“.”.)创建文件,返回null
(3)使用绝对路径创建文件,返回其父目录,如File file2 =new File("C://Test//wangliang2.txt");则返回C:/Test
(4)使用父目录创建文件,如File file4= new File("F://test//..//王亮4.txt");返回F:/test/..
7、getAbsolutePath()
8、getPath()
getPath()和getAbsolutePath()的区别:
(1)如果文件使用绝对路径创建的,那么两者相等
(2)如果使用相对路径创建文件,结果不同:
如果当前目录C:/(即CMD所在目录,而.class文件放在C:/下)
File file =new File(".//wangliang.txt");
if(!file.exists())file.createNewFile();
System.out.println("file文件绝对目录:"+file.getAbsolutePath()+" file文件目录"+file.getPath());
file文件绝对目录:C://./wangliang.txt file文件目录./wangliang.txt
File file3 =new File("wangliang3.txt");
if(!file3.exists())file3.createNewFile();
System.out.println("file3文件绝对目录:"+file3.getAbsolutePath()+" file3文件目录"+file3.getPath());
file3文件绝对目录:C://wangliang3.txt file3文件目录wangliang3.txt
如果CMD是默认路径C:/Documents and Settings/Administrator>,则结果为
file文件绝对目录:C:/Documents and Settings/Administrator/./wangliang.txt file
文件目录./wangliang.txt
file3文件绝对目录:C:/Documents and Settings/Administrator/wangliang3.txt file3
文件目录wangliang3.txt
9、getCanonicalPath(),不管文件是否使用绝对路径创建,得到的是绝对路径(不含点号.和多余的斜杠/)。
一个例子
File file4= new File("F://test//..//王亮4.txt");
if(!file4.exists())file4.createNewFile();
System.out.println("file4文件绝对目录:"+file4.getAbsolutePath()+";file4文件目录"+file4.getPath()+";file4正规目录"+file4.getCanonicalPath());
在C:/运行
file4文件绝对目录:F:/test/../王亮4.txt;file4文件目录F:/test/../王亮4.txt;file4
正规目录F:/王亮4.txt
在默认的路径下运行
file4文件绝对目录:F:/test/../王亮4.txt;file4文件目录F:/test/../王亮4.txt;file4
正规目录F:/王亮4.txt
所以正规目录getCanonicalPath()比较好
10、isFile()
11、isDirectory()
【注意】:当文件或者目录不存在时,为false,也就是说当exists()为false时上面两个方法都是false
12、isAbsolute()文件或者目录是否为绝对路径,注意File file4= new File("F://test//..//王亮4.txt")也是绝对路径
13、String[] list()
如果此抽象路径名不表示一个目录,此方法返回 null。否则返回一个字符串数组。每个字符串是一个文件名,而不是一条完整路径。
不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。
13、File[] listFiles()
如果此抽象路径名不表示一个目录,那么此方法将返回 null。否则返回一个 File 对象数组,得到的每个抽象路径名都是根据此抽象路径名,使用 File(File, String)构造方法构造的。所以,如果此路径名是绝对路径名,那么得到的每个路径名都是绝对路径名;如果此路径名是相对路径名,那么得到的每个路径名都是相对于同一目录的路径名。
14、boolean createNewFile()文件的父目录要存在(否则出错);如果文件已经存在则不会重复创建文件
15、boolean mkdirs()创建目录,父目录以及以上的目录都不不存也会创建父目录
16、boolean mkdir(),父目录存在时才会创建目录,否则无效,但是没有异常
下面看两个稍微复杂的例子
【1】获得目录下的所有文件和目录:
File dir =new File("F://Test//wangliang文件夹");
if(!dir.exists())dir.mkdir();
System.out.println(dir.getParent());
System.out.println(dir.isAbsolute());
System.out.println("=====================");
File[] sons = dir.listFiles();
for(File son:sons){
if(son.isFile())
System.out.println("文件:"+son);
else
System.out.println("目录:"+son);
}
=====================
目录:F:/Test/wangliang文件夹/新建文件夹
文件:F:/Test/wangliang文件夹/新建文本文档.txt
目录:F:/Test/wangliang文件夹/新建文件夹 (2)
文件:F:/Test/wangliang文件夹/新建 Microsoft Excel 工作表.xls
【2】删除目录及其目录下的文件和子目录
static void deleteDir(File dir){
if(dir.isFile()){
dir.delete();
return ;
}
if(dir.isDirectory()){
File[] lists = dir.listFiles();
for(File file:lists){
deleteDir(file);
}
dir.delete();
}
return ;
}
【3】复制目录及其目录下的文件和子目录
static void copyDir(String src,String desc) throws IOException{
File srcDirRoot = new File(src);
File descDirRoot = new File(desc);
if(srcDirRoot.isFile()){
FileInputStream in = new FileInputStream(srcDirRoot);
File f = new File(descDirRoot,srcDirRoot.getName());
FileOutputStream out = new FileOutputStream(f,true);
byte[] buf = new byte[1024];
int len = 0;
while((len=in.read(buf))!=-1){
out.write(buf);
}
in.close();
out.close();
return ;
}
if(srcDirRoot.isDirectory()){
if(!descDirRoot.exists())
descDirRoot.mkdirs();
File d = new File(descDirRoot,srcDirRoot.getName());
if(!d.exists())
d.mkdir();
File [] lists = srcDirRoot.listFiles();
for(File file:lists){
copyDir(file.toString(),d.getPath());
}
}
}