IO流File类的基本使用
File类只能表示计算机中的文件或目录而不能获取或操作文件内容,通过File类获得获取到文件的基本信息,如文件名、大小等。但不能获取文件内容。(Java中表示文件路径分隔符使用"/"或"\\")
File类的构造方法:- File("E:/abc/abc.txt"):根据文件或目录的具体路径创建一个文件对象- File("E:\\测试\\redme.txt","redme.txt");根据父目录和文件名创建一个文件对象
1、创建一个文件对象并判断文件是否存在
public class FileDemo1 {public static void main(String[] args) {//创建一个文件对象File file = new File("D:\\测试");System.out.println(file);//检测file对应的文件是否存在if (file.exists()) {System.out.println("文件存在");}else {System.out.println("文件不存在");}}
}
文件存在,可通过String file.getName()获得文件名
String fileName = file.getName();
System.out.println(fileName);
String file.getAbsolutePath()获得文件的绝对路径
String filePath = file.getAbsolutePath();
System.out.println(filePath);
long file.length()获得文件的大小,返回的字节单位
long fileSize = file.length();
double fileSizeK = fileSize / 1024.0;
System.out.println("KB大小:"+fileSizeK);
boolean file.setReadOnly()设置文件为只读
boolean isReadOnly = file.setReadOnly();
System.out.println(isReadOnly);//成功返回true
boolean file.setWritable(true)设置文件是否可写入
file.setWritable(true);
2、对文件进行相关操作
1)boolean file.createNewFile()创建文件,该方法只能创建文件不能创建目录,如果目录不存在则报异常
2)boolean file.delete()删除指定文件或目录,注意,如果目录中存在内容则无法删除
3)boolean file.mkdir()创建目录,该方法只能创建一级目录,不能创建多级目录
4)boolean file.mkdirs()创建多级目录
创建文件
import java.io.File;
import java.io.IOException;public class FileDemo2 {public static void main(String[] args) throws IOException {File file = new File("D:\\测试");if (file.exists()){//存在System.out.println("文件存在,文件名为:");System.out.println(file.getName());System.out.println("开始删除文件");boolean isOk = file.delete();System.out.println(isOk?"文件删除成功":"文件删除失败");}else {//不存在System.out.println("文件不存在,开始创建文件...");//创建文件,该方法只能创建文件,不能创建目录,如果目录不存在则报异常boolean isOk = file.createNewFile();System.out.println(isOk?"文件创建成功":"文件创建失败");}}
}
创建目录
import java.io.File;
import java.io.IOException;public class FileDemo3 {public static void main(String[] args) throws IOException {File file = new File("D:/目录测试/测试中");if (file.exists()){System.out.println("目录存在");boolean isOk = file.delete();System.out.println(isOk?"目录删除成功":"目录删除失败");}else {System.out.println("目录不存在");//不存在,创建目录//boolean isOk = file.mkdir();//创建一级目录boolean isOk = file.mkdirs(); //创建多级目录System.out.println(isOk?"目录创建成功":"目录创建失败");}}
}
3、判断是目录还是文件
1)boolean isFile()检测是否为文件,如果是返回true,否则返回false
2)boolean isDirectory()检测是否为目录,如果是返回true,否则返回false
3)File.separator:路径分隔符,该分隔符会根据不同的操作系统使用不同的分隔符,具有跨平台性
import java.io.File;public class FileDemo4 {public static void main(String[] args) {File file = new File("D:"+File.separator+"测试");//检测file对应的文件时文件还是目录if (file.exists()) {System.out.println("是文件");}else {System.out.println("不是文件");if (file.isFile()){System.out.println("是目录");}else {System.out.println("不是目录");}}}
}
4、获取目录中的所有直接子文件或子目录相关信息
1)String[] file.list()获得目录中的所有直接子文件或子目录名称,返回包含这些名称的字符串数组
2)File[] file.listFiles()获得目录中所有的子文件对象或子目录对象
import java.io.File;public class FileDemo5 {public static void main(String[] args) {File file = new File("D:\\测试");//获得目录中所有子目录或文件的文件名String[] subFileNames = file.list();for (String fileName : subFileNames){System.out.println(fileName);}System.out.println("----------------");//获得目录中所有的子文件对象或子目录对象File[] subFiles = file.listFiles();for (File subFile : file.listFiles()){System.out.println(subFile);}}
}
5、实例
1) 删除D:/测试目录,如果目录中存在内容依然删除
import java.io.File;public class DeleteDirectory {public static void main(String[] args) {File file = new File("D:/测试");delDirectory(file);}/*** 删除文件或目录* @param file 文件对象*/public static void delDirectory(File file) {//文件或目录不存在if (file == null){throw new NullPointerException("文件或目录不存在");}//检测是文件还是目录if (file.isFile()){//获得文件的绝对路径String filePath = file.getAbsolutePath();boolean boo = file.delete();System.out.println(boo?filePath+":删除成功":filePath+"删除失败");}else if (file.isDirectory()){//如果是目录//获得file目录的所有子文件File[] subFiles = file.listFiles();if (subFiles != null && subFiles.length !=0){//循环遍历所有子文件for (File subFile : subFiles) {//进入子目录//递归调用delDirectory(subFile);}//删除父目录if (file.listFiles().length==0){String filePath = file.getAbsolutePath();//file对应目录没有子文件,删除file目录boolean isDelete = file.delete();System.out.println(isDelete?"目录:"+filePath+":删除成功":"目录"+filePath+":删除失败");}else {String filePath = file.getAbsolutePath();//file对应目录没有子文件,删除file目录boolean isDelete = file.delete();System.out.println(isDelete?"目录:"+filePath+":删除成功":"目录:"+filePath+"删除失败:");}}}}
}
2)遍历D:/测试test目录中的所有内容,包含子目录中的内容,在控制台上显示每个文件的绝对目录
import java.io.File;public class ShowFileList {public static void main(String[] args) {File file = new File("D:\\测试test");showFileList(file);}public static void showFileList(File file) {if (file == null){throw new NullPointerException("文件不存在");}if (file.isFile()){String filePath = file.getAbsolutePath();System.out.println(filePath);} else if (file.isDirectory()) {File[] subFiles = file.listFiles();for (File subFile : subFiles){showFileList(subFile);}}}
}
3)显示D:盘下的所有word文件
方法一:
import java.io.File;public class ShowFileList1 {public static void main(String[] args) {File file = new File("D:/");showFileList(file);}public static void showFileList(File file) {if(file == null){throw new NullPointerException("文件不存在..");}if (file.isFile()){String filePath = file.getAbsolutePath();if (filePath.endsWith(".doc") || filePath.endsWith(".docx") || filePath.endsWith(".DOC") || filePath.endsWith(".DOX")){System.out.println(filePath);}} else if (file.isDirectory()) {File[] subFiles = file.listFiles();if (subFiles != null && subFiles.length!=0){for (File subFile : subFiles){showFileList(subFile);}}}}
}
方法二:
import java.io.File;
import java.io.FilenameFilter;ic class FileFilterDemo {public static void main(String[] args) {File file = new File("D:/");//遍历目录中的所有子文件,并设置文件名过滤条件,将符合条件的文件获得File[] subFiles = file.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File file, String fileName) {if (fileName.endsWith(".doc") || fileName.endsWith(".docx")) {return true;}return false;}});for (File subFile : subFiles){System.out.println(subFile.getAbsolutePath());}}
}
4)遍历磁盘中的所有文件,并将文件输出(全盘扫描)
import java.io.File;public class ScannDisk {public static void main(String[] args) {File[] rootsList = File.listRoots(); //File.listRoots():获取磁盘中的所有盘符for (File root : rootsList) {showFileList(root);}}public static void showFileList(File file) {if (file == null){throw new NullPointerException("文件不存在....");}if (file.isFile()){//检测是否为文件//获得文件的绝对路径String filePath = file.getAbsolutePath();System.out.println(filePath);}else if (file.isDirectory()){//检测是否为目录//获得目录中所有的子文件对象或子目录对象File[] subFiles = file.listFiles();if (subFiles != null && subFiles.length!=0){for (File subFile : subFiles){showFileList(subFile);}}}}
}