File类
用于描述操作系统中的一个文件或者目录.
通过该类我们可以得知描述的文件或者目录的信息,例如,名字,大小,修改日期等等.但是不能对其内容进行访问.
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* java访问文件或目录
* @author Administrator
*
*/
public class FileDemo {
public static void main(String[] args) {
//java.io.File
/**
* 构造方法中可以添加文件的路径
* elipse中,当前目录指的是eclipse中当前项目的根目录
*/
/**
* 目录层级分隔符使用File的一个常量来表示
* 这样就可以避免不同操作系统的差异性
* File.separator
*/
String path="."+File.separator+"myfile.txt";
System.out.println(path);// .\myfile.txt
/**
* 创建的file对象描述的就是项目根目录下的myfile.txt文件了
*/
File file=new File(path);
/**
* 通过该对象我们可以获取当前文件的信息
* 但是不能得知其内容,
*/
/**
* 获取文件的大小
* long length() 返回值为文件的总字节量
*/
System.out.println("文件大小:"+file.length()+"字节");
/**
* 获取当前文件名
* String getName()
*/
System.out.println("文件名:"+file.getName());
/**
* 获取当前文件路径
* String getPath()
*/
System.out.println("路径:"+file.getPath());
/**
* 获取当前文件绝对路径
* 含相对路径
* String getAbsolutePath()
*/
System.out.println("绝对路径:"+file.getAbsolutePath());
/**
* 获取当前操作系统标准绝对路径
*
* String getCanonicalPath()
* 但是该方法需要捕获异常
*/
try {
System.out.println(file.getCanonicalPath());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* 获取当前文件最后修改时间
* long lastModified()
*/
//long-->date
Date d=new Date(file.lastModified());
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr=df.format(d);
System.out.println("最后修改日期:"+dateStr);
/**
* 询问该File对象,描述的是一个文件么
* boolean isFile()
* true:是一个文件
*/
System.out.println("是一个文件:"+file.isFile());
/**
* 询问File对象,描述的是否为一个目录
* boolean isDirectory
* true: 是一个目录
*/
System.out.println("是一个目录:"+file.isDirectory());
/**
* 询问该文件是否可读
* boolean canRead()
* true:可读
*/
System.out.println("可读:"+file.canRead());
/**
* 询问该文件是否可写
* boolean canWrite()
* true:可写
*/
System.out.println("可写:"+file.canWrite());
}
}
通过File创建文件或目录
boolean mkdir(): 当前File对象描述的目录
当且仅当目录创建成功返回true.
boolean mkdirs():创建当前File对象描述的目录,同时自动创建所有不存在的父目录
boolean createNewFile():创建File对象描述的文件
boolean delete():删除当前File对象描述的文件或者目录.
import java.io.File;
import java.io.IOException;
/**
* 创建文件,目录
* @author Administrator
*
*/
public class FileDemo2 {
public static void main(String[] args) throws IOException {
/**
* 使用File对象描述一个目录
* 路径:mydir等效./mydir
* 都代表了当前目录下的mydir
*/
File file=new File("mydir");
/**
* 判断创建的file对象所描述的文件或者目录是否存在
*/
if(!file.exists()){
/*
*
* 若不存在,则创建该目录
*/
file.mkdir();
System.out.println("目录创建成功");
}
System.out.println(file.getCanonicalPath());
String Path=file.getCanonicalPath()+File.separator+"test.dat";
File subFile=new File(Path);
if(!subFile.exists()){
subFile.createNewFile();
System.out.println("文件创建成功");
}
}
}
mkdirs
import java.io.File;
public class FileDemo3 {
public static void main(String[] args) {
String path="a"+File.separator+"b"+File.separator+"c"+File.separator+"d";
File file=new File(path);
if(!file.exists()){
//mkdirs不同于mkdir 它可以创建不存在的上级目录
if(file.mkdirs()){
System.out.println("创建成功");}else{
System.out.println("创建失败");
}
}
}
}
delete
import java.io.File;
public class FileDemo4 {
public static void main(String[] args) {
/**
* 删除当前目录下的myfile.txt文件
*/
File f=new File("myfile.txt");
if(f.exists()){
if(f.delete()){
System.out.println("删除成功");}else{
System.out.println("删除失败");
}
}
/**
* 删除当前目录下的dir目录
*/
File dir=new File("mydir");
if(dir.exists()){
if(dir.delete()){
System.out.println("删除成功");}else{
System.out.println("删除失败");
}}
/**
* 删除目录
* 注意:删除目录时,确保目录下没有任何子项,该目录才可以被成功删除
*/
}
}
获取当前目录所有子项
import java.io.File;
public class FileDemo5 {
public static void main(String[] args) {
/**
* 获取当前目录下的所有内容
* 当前目录就是当前项目的根目录
*/
File f=new File(".");
if(f.exists()&&f.isDirectory()){
/**
* 获取当前目录下的所有子项
*/
File[] files=f.listFiles();
//遍历所有子项
for(File name:files){
// if(name.isFile()){
// System.out.println("文件:"+name.getName());}else{
// System.out.println("目录:"+name.getName());
System.out.println((name.isFile()?"文件:":"目录:")+name.getName());
}
String[] file=f.list();
for(String s:file){
System.out.println(s);
}
}
}
}
FileFilter文件过滤器
该接口用于指定对文件的过滤条件.
File.listFiles(FileFilter filter):重载方法.返回满足给定过滤器的条件的所有子项.
回调模式
import java.io.File;
import java.io.FileFilter;
/**
* 获取目录下的部分子项
* FileFilter文件过滤器
* @author Administrator
*
*/
public class TestFile6 {
public static void main(String[] args) {
/**
* 需求:当前项目目录下以"."开头的子项
*/
File dir=new File(".");
FileFilter filter=new FileFilter(){
public boolean accept(File file) {
return file.getName().startsWith(".");
}
};
/**
* 回调模式
* A调用B的方法,传入C,B的方法在运行的过程中会调用C的方法来完成工作,这个情况就是回调模式
*/
File[] subFiles=dir.listFiles(filter);
for(File subFile:subFiles){
System.out.println("子项:"+subFile.getName());
}
}
}