File类
概念:代表物理盘符中的一个文件或者文件夹
创建一个File对象
- 相对路径创建
public class TestFile {
public static void main(String[] args) {
//创建File对象,相对路径(在该项目下)
File f = new File("abc.txt");
try {
//File.separator,转义符"\"
System.out.println(File.separator);
//创建一个新的对象
f.createNewFile();
System.out.println("success");
//显示最后一次文件的修改时间
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date(f.lastModified())));
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行结果
创建的文件
- 绝对路径创建
public static void main(String[] args) {
// 根据路径名创建一个文件对象(结对路径)
// File.separator,表示"\"
//连接起来便是 D:\java\hello.java
File f = new File("D:\\java" + File.separator + "hello.java");
try {
// 文件如果不存在
if (!f.exists())
// 在真实路径下创建一个物理文件
f.createNewFile();
else
// 删除该文件对象所在真实路径下的物理文件
f.delete();
} catch (IOException e) {
e.printStackTrace();
}
}
执行结果
File常用方法
方法名 | 说明 |
---|---|
createNewFile() | 创建一个新文件 |
mkdir() | 创建一个新目录(如果父目录不存在,创建不成功) |
mkdirs() | 创建一个新目录(即使父路径不存在,该方法也能够创建有必要的父路径用来创建子路径) |
delete() | 删除文件或空目录 |
exists() | 判断File对象所代表的对象是否存在 |
getAbsolutePath() | 获取文件的绝对路径 |
getName() | 取得名字 |
isDirectory() | 是否是目录 |
isFile() | 是否是文件 |
length() | 获取文件的长度 |
list() | 列出目录中的所有内容(不包括父路径) |
listFiles() | 列出目录中的所有内容(包括父路径) |
renameTo() | 修改文件名 |
isAbsolute() | 判断一个文件对象是否绝对路径 |
getPath() | 获取一个文件对象具体路径 |
getParent() | 获取一个用绝对路径创建的文件对象的父路径 |
isHidden() | 判断一个文件对象是否是隐藏文件 |
canExecute() | 判断一个文件对象是否可执行 |
canWrite() | 判断一个文件对象是否可写 |
canRead() | 判断一个文件对象是否可读 |
lastModified() | 可以获取文件的最后一次修改时间,注意返回值是一个表示时间的long类型的值 |
经典栗子
1.列出给定path路径下所有特定后缀的的文件
public class FileTraverse {
//创建静态成员 list集合 保存目录下的文件名
static List<String> list = new ArrayList<>();
//main方法,测试
public static void main(String[] args) {
//找出image文件夹下,后缀为.jpg和.png的文件
getFileListBySurfix("D:\\java\\image", ".jpg",".png");
//打印
System.out.println(list);
}
//自定义方法,因为可能求多个后缀,将参数设定为可变参数
public static List<String> getFileListBySurfix(String path, String ... surfix){
//创建File对象
File f = new File(path);
//判断f 是否为文件
if(f.isFile()) {
//如果是文件,执行此处代码,遍历可变参数的值
for(String s:surfix) {
//判断文件后缀是否在参数中
if(f.getName().endsWith(s)) {
//如果在,追加到list集合
list.add(f.getAbsolutePath());
}
}
//如果f 不是文件(文件夹) 执行此处代码
}else {
//得到文件夹中所有的文件
String []str = f.list();
//遍历
for(String s:str) {
//递归调用自己(参数不要忘记)
getFileListBySurfix(path + File.separator + s,surfix);
}
}
//返回值
return list;
}
}
执行结果
2.使用FileWriter对象来实现将给定内容写入文件中
public static void main(String[] args) throws IOException {
//创建fFile对象
File f = new File("Hello.java");
//判断f是否存在
if(!f.exists()) {
//如果不存在,则创建新的文件夹
f.createNewFile();
}
String str = "public static void main(String[] args)";
// 使用文件对象来创建FileWriter对象
FileWriter fw = new FileWriter(f);
// 使用FileWriter对象来实现将给定内容写入文件中,只需要操作流本身,流会自动来操作文件
fw.write(str);
System.out.println("write done.");
// 用完流之后记得关闭资源
fw.close();
}
执行结果
hello.java中
3.读取文件夹中的内容
public static void main(String[] args) {
//创建f对象
File f = new File("Hello.java");
//创建FileReader对象
FileReader fr = null;
try {
//赋值
fr = new FileReader(f);
int len = 0;
//read方法,会读出一个字符,然后指针向后移一位
//每执行一次,指针就会后移
//不加len,用fr.read()) != -1判断,这里read就会执行
//故读出来的数据会跳一位
while ((len = fr.read()) != -1)
System.out.print((char) len);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fr != null) {
//关闭资源
fr.close();
//使得JVM更快的清理
fr = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
执行结果
4.“拷贝”(先读出一个文件的内容,再将该内容写入到新创建的文件)
public class TestFileCopy {
public static void main(String[] args) {
//创建可变长度字符串
StringBuilder sb = new StringBuilder();
//创建File对象
File f1 = new File("Hello.java");
//创建FileReader对象
FileReader fr = null;
try {
fr = new FileReader(f1);
int len = 0;
while((len = fr.read()) != -1) {
//将Hello.java中的内容读取出来
//将内容追加到可变长度字符串内
sb.append((char)len);
}
//打印可变字符串
System.out.println(sb);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(fr != null) {
//关闭资源
fr.close();
//使得JVM早点清理
fr = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
//分隔符
System.out.println("===============");
//创建新的File对象
File f2 = new File("hello2.java");
//创建新文件
if(!f2.exists()) {
try {
f2.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
//创建FileWriter对象
FileWriter fw = null;
try {
fw = new FileWriter(f2);
//将可变字符串的内容加入到新的文件
fw.write(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(fw != null) {
//关闭资源
fw.close();
fw = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("copy done!");
}
}
执行结果
hello2.java文件里