(IO流类示例一)File类
io流:java.io.File主要是对磁盘上的文件或目录进行读取操作。但是File这个类只能够读取文件的信息(文件名、文件大小、文件是否存在等),不能对文件的内容进行操作
方法:
①File(String pathname):构造方法,内部为绝对路径
②File(File parent,String chile):构造方法,前部分文件对象,后部分文件名或目录名
③File(String parent,String chile):构造方法,前部分父路径名,后部分文件名或目录名
④File(URI ure):构造方法
⑤String getName():获取文件或目录名称
⑥long length():获取文件或目录长度
⑦boolean isFile():判断是否为文件
⑧boolean isDirectory():判断是否为目录
⑨boolean exists():判断文件或目录是否存在
⑩boolean delete():删除文件
⑪boolean createNewFile():创建新文件
⑫boolean mkdir():创建目录
⑬boolean mkdirs():创建多级目录
⑭boolean accept():FileFilter接口下的一个方法,用于筛选符合指定条件的文件
方法测试:
例一:在d盘下创建一个记事本文件
import java.io.File;
public class FileDemo01 {
public static void main(String[] args) {
File file=new File("D:\\IO流练习.txt");
System.out.println("文件名称为:"+file.getName());//输出结果:文件名称为:IO流练习.txt
System.out.println("文件长度为:"+file.length());//输出结果:文件长度为:4
System.out.println("是否为文件:"+file.isFile());//输出结果:是否为文件:true
System.out.println("是否为目录:"+file.isDirectory());//输出结果:是否为目录:false
System.out.println("文件是否存在:"+file.exists();//输出结果:文件是否存在:true
System.out.println("文件是否删除:"+file.delete());//输出结果:文件是否删除:true
}
}
*注:若没有该文件系统不会自行创建。
例二:
import java.io.File;
import java.io.IOException;
public class FileDemo02 {
public static void main(String[] args) throws IOException {
File f0=new File(".");//.相当于当前路径下
File f1=new File(f0,"b.txt");//相当于File f1=new File(".","b.txt"),该方法使用较少
if(!f1.exists()) {
f1.createNewFile();
}else {
System.out.println("文件已经存在");
}
//输出结果:
File f2=new File(".","File");
if(!f2.exists()) {
f2.mkdirs();
}else {
System.out.println("目录已存在");
}
//输出结果:
File f3=new File(".","a\\b\\c\\d");
if(!f3.exists()) {
f3.mkdirs();
}else {
System.out.println("目录已存在");
}
//输出结果:
}
}
例三:根据给定条件筛选符合条件的文件
方法一:
import java.io.File;
import java.io.FileFilter;
public class FileDemo03 {
public static void main(String[] args) {
File file=new File(".");
File[] fs=file.listFiles(new FileFilter() {
public boolean accept(File filename) {
return filename.getName().endsWith(".txt");
}
});
for (File file2 : fs) {
System.out.print(file2.getName());
System.out.print("/");
//输出结果:b.txt/c.txt/d.txt/
}
}
}
方法二:
import java.io.File;
import java.io.FileFilter;
public class FileDemo03 {
public static void main(String[] args) {
File file=new File(".");
File[] fs=file.listFiles();
for(File files:fs) {
if(files.getName().endsWith(".txt")) {
System.out.print(files.getName());
System.out.print("/");
//输出结果:b.txt/c.txt/d.txt/
}
}
}
}
例四:利用递归方法删除嵌套文件夹
import java.io.File;
public class FileDemo04 {
public static void main(String[] args) {
File file =new File("a");
delFile(file);
}
public static void delFile(File f) {
if(f.exists()) {
if(f.isDirectory()) {
File[] fs=f.listFiles();
if(fs.length!=0) {
for (File f1 : fs) {
delFile(f1);
}
}
}
f.delete();
}else {
System.out.println("目录不存在");
}
}
}
输出结果:
增加知识点:递归方法
特点:自己调用自己,但需要给出一个终止条件
例一:编写递归方法实现阶乘
package com.hyxy;
public class FileDemo04 {
public static void main(String[] args) {
System.out.println(f(10));//输出结果:3628800
}
public static long f(int i) {
if(i==1) {
return 1;
}
return i*f(i-1);
}
}
例二:利用递归方法求出斐波那契数列任意位
package com.hyxy;
public class FileDemo04 {
public static void main(String[] args) {
System.out.println(m(20));//输出结果:6765
}
public static long m(long i) {
if(i==1||i==2) {
return 1;
}
return i=m(i-1)+m(i-2);
}
}