android培训、 java培训、期待与您交流!
(黑马程序员) File
File用来将文件或者文件夹封装成对象,方便对文件与文件夹属性信息进行操作。而且File对象可以作为参数传递给流的构造函数。
构造函数:
Code:
import java.io.*;
class FileDemo
{
public static void main(String[] args)
{
}
//File类的构造函数的演示
public static void consMethod()
{
//c:盘下abc目录下的b.txt封装成对象,可以将已知的和未出现的文件或者文件夹封装成对象。
File f1 = new File("c:/abc/a.txt");
//将c:盘下abc目录下的b.txt封装成对象。它和第一种方式的区别在于其中的“b.txt”是可以通过传参的形式变化的。
File f2 = new File("c:/abc","b.txt");
File d = new File("c:/abc");
//将上面创建的File对象作为参数传给下面的构造方法。
File f3 = new File(d,"c.txt");
//File.separator是跨平台的分割符
File f4 = new File("c:"+File.separator +"abc"+File.separator +"a.txt")
}
}
File常见方法
|--创建:
boolean createNewFile();在指定位置创建文件,如果该文件已经存在,则不创建并返回false。和输出流不一样,输出流对象创立文件时不管是否已经曾在,如果已经曾在则覆盖。
static File createTempFile(String prefix, String suffix);创建临时文件
static File createTempFile(String prefix, String suffix, File directory);创建临时文件
boolean mkdir();创建单级文件夹
boolean mkdirs ();创建多级文件夹
|--删除:
boolean delete();删除文件
void deleteOnExit();jvm退出时将调用此方法的文件删除
|--判断:
boolean canExecute();
boolean canRead();
boolean canWrite();
int compareTo(File pathname)
boolean exists();文件是否在物理资源上存在。
isFile();判断是否是文件
isDirectory();判断是否是目录
isHidden();尽量不访问系统中隐藏文件,java不论隐藏与否都访问
isAbsolute();判断是否是绝对路径,不论File对象是否在物理资源上存在都可以判断
注意:在使用isFile()和isDirectory()两个方法时务必使用exist()方法判断调用前二者方法的对象是否在物理资源上存在,如不存在则isFile和isDirectory都将返回false。new File("a.txt")这个创建的实际上仅仅是内存中一个File对象,换句话说这是纸上谈兵,需要用createNewFile()或者mkdir()、boolean mkdirs ()将其沙场点将(在硬盘或者其他物理资源上创建)。
|--获取信息:
getName();可以是不存在的文件
getPath();可以是不存在的文件
getParent();获取父目录,返回的是绝对路径下的父目录,而调用此方法的File对象是相对路径下表示的本身文件(“a.txt”),则会由于切换到不同目录而父目录会变化而导致返回的值为null。如果带有上级目录(“a/a.txt”)则返回上级目录("a")。可以是不存在的文件。
File getAbsolutePath();返回绝对路径并将其封装成File对象,可以是不存在的文件
String getAbsolutePath();返回绝对路径的String方式,可以是不存在的文件
long lastModified();最后一次修改时间
long length();返回文件的大小或者体积
static File[] listRoots();
Code:
File[] files = File.listRoots();
for(File f : files)
{
System.out.println(f);
}
String[] list();返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中包含隐藏文件在内的所有文件和目录,而且此调用此方法的File对象必须封装了一个目录,该目录还必须存在。
String[] list(FilenameFilter filter) ;
Code:
File dir = new File("d:/java1223/day18");
String[] arr = dir.list(
//下面是创建一个匿名过滤器
new FilenameFilter()
{
public boolean accept(File dir,String name)
{
return name.endsWith(".bmp");
}
});
File[] listFiles();返回的是File对象,我们可以使用File的方法进一步处理;
File[] listFiles(FileFilter filter) ;
|--其他:
renameTo(File dest);更名
File类中renameTo(File dest)方法测试;
File f1 = new File("c:/test1.txt");
File f2 = new File("c:/test2.txt");
a.c盘下二者均无,
b.c盘下二者仅有一个;
c.f2路径改为“d:/test2.txt”,且d盘没有“d:/test2.txt”:成了剪切
d.f2路径改为“d:/test2.txt”,且d盘有“d:/test2.txt”
注意:所谓的覆盖就是exists先判断是否存在,如果存在则Delete掉,建立一个同名的文件。
列出目录所有内容---递归
函数自身调用自身的这种表现形式或者编程手法称之为递归(回想高三数学)。递归的使用必须注意两点:1、设定中指递归条件,否则无限循环下去;2、要注意递归次数,因为递归的特点是前一环在等待后一环的结果如果,环数过多在内存中开辟的空间过多而导致空间不够。
Code:
import java.io.*;
class FileDemo
{
public static void main(String[] args)
{
File dir = new File("d:/java1223");
}
public static void showDir(File dir)
{
File[] files = dir.listFiles();
for(int x = 0;x<files.length;x++)
{
//如果取到的File对象仍是目录,继续调用本身方法处理
if(files[x].isDirectory())
showDir(files[x]);
else
System.out.println(files[x]);
}
}
}
删除带内容的目录
原理:在windows中,删除有内容的目录是从里向外删。,就需要用到递归。
Code:
import java.io.*;
class RemoveDir
{
public static void main(String[] args)
{
}
public static void removeDir(File dir)
{
File[] files = dir.listFiles();
for(int x = 0;x<length;x++)
{
if(files[x].isDirectory())
removeDir(files[x]);
else
//通过打印知道删除是否合理,如果出现false说明有文件或者目录被重复删除,需要检查程序
System.out.println(files[x].toString()+":-file-:"files[x].delete );
}
//将外部的目录也删去
System.out.println(dir+"::dir::"+dir.delete(););
}
}
---------------------- android培训、 java培训、期待与您交流! ---------------------- 详细请查看: http://edu.csdn.net/heima