1.什么是IO流?
(1)IO流:I(Input)O(Output)指输入输出流
(2)IO流是用于操作磁盘上的文件
(3)通过IO流可以读取磁盘上的文件到程序,也可以将程序中的数据写入到磁盘的文件上
2.文件
(1)Java中的File类表示磁盘中的文件,该类在java.io包下
(2)File类的一个实例(对象),即表示磁盘中的具体文件(abc.txt),又表示磁盘中的文件夹(目录)
(3)通过File类就可以直接操作磁盘中的文件,但不能操作磁盘中文件的内容
(4)通过File类可以在磁盘中创建文件或文件夹,获得文件文件名及大小等相关属性
3.如何使用File类
创建File类对象
File file = new File(“文件路径(当前file对象所表示的文件)”);
4.File类中常用的方法:
(1) file.exists():检测文件是否存在
public class FileDemo1 {
public static void main(String[] args) throws IOException {
//创建File类的一个对象(file对象表示d盘下的abc.txt)
File file = new File("d:/abc.txt");
//检测file对象表示的文件是否存在
if(file.exists()){
//检测文件是否存在,如果存在返回true、否则返回false
System.out.println("文件存在!");
//获得文件名
String fileName = file.getName();
System.out.println("文件名:"+fileName);
}else{
System.out.println("未找到文件!");
//创建文件
file.createNewFile();
System.out.println("文件创建成功!");
}
}
}
(2) file.createNewFile():创建一个文件
public class FileDemo2 {
public static void main(String[] args) throws IOException {
//创建文件对象
File file = new File("d:/abc.txt");
if(file.exists()){
//删除文件
file.delete();
System.out.println("文件删除成功!");
}else{
file.createNewFile();
System.out.println("文件创建成功!");
}
}
}
(3) file.getName():获得文件名
(4) file.delete():删除文件
(5) file.getAbsolutePath():获得文件的绝对路径
(6) 获得该文件的扩展名
String fileName = file.getName();
//根据文件名获得该文件的扩展名
String extName = fileName.substring(fileName.lastIndexOf(“.”)+1);
System.out.println(“扩展名为:”+extName);
(7) 获得最后修改时间,以字符串的格式显示时间
//获得文件的最后修改时间
long lastTime = file.lastModified();
//使用得到的毫秒数创建Date对象
Date date = new Date(lastTime);
//将日期进行格式化
String lastModifierTime = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”).format(date);
System.out.println(lastModifierTime);
(8) 以MB为单位获得文件的大小
//获得文件的大小(字节为单位)
long fileSize = file.length();
//将以字节为单位的文件转换以MB为单位
double size = fileSize/1024.0/1024;
System.out.println(fileName+“文件的大小为:”+size+“MB”);
public class FileDemo3 {
public static void main(String[] args) throws IOException {
//创建文件对象
File file = new File("D:/SoftWare/dev-install/apache-maven-3.6.2-bin.zip");
if (file.exists()) {
//获得文件的绝对路径
String path = file.getAbsolutePath();
System.out.println("文件的路径为:" + path);
//获得文件的扩展名
String fileName = file.getName();
//根据文件名获得该文件的扩展名
String extName = fileName.substring(fileName.lastIndexOf(".") + 1);
System.out.println("扩展名为:" + extName);
//获得文件的最后修改时间
long lastTime = file.lastModified();
//使用得到的毫秒数创建Date对象
Date date = new Date(lastTime);
//将日期进行格式化
String lastModifierTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
System.out.println(lastModifierTime);
//获得文件的大小(字节为单位)
long fileSize = file.length();
//将以字节为单位的文件转换以MB为单位
double size = fileSize/1024.0/1024;
System.out.println(fileName+"文件的大小为:"+size+"MB");
} else {
file.createNewFile();
System.out.println("文件创建成功!");
}
}
}
(9) file.mkdir():创建一级文件夹
(10) file.mkdirs():创建多级文件夹(多级目录)
public class FileDemo4 {
public static void main(String[] args) throws IOException {
//创建一个文件对象
File file = new File("d:/abc/xyz");
if(file.exists()){
String fileName = file.getName();
System.out.println("文件名:"+fileName);
}else{
System.out.println("文件不存在,文件创建中...");
//file.createNewFile();//用于创建文件,不能创建目录
//file.mkdir();//创建单个文件夹
file.mkdirs();//用于创建多级文件夹
System.out.println("文件创建成功!");
}
}
}
(11) file.isFile():判断是否为文件,返回true表示文件,否则表示不是文件
(12) file.isDirectory():判断是否为文件夹(目录),返回true表示目录,否则表示不是目录
public class FileDemo5 {
public static void main(String[] args) throws IOException {
//创建一个文件对象
File file = new File("d:/abc.txt");
//判断file是否为文件
if(file.isFile()){
System.out.println(file.getName()+":是文件");
}
//检测是否为目录(文件夹)
if(file.isDirectory()){
System.out.println(file.getName()+":是文件夹");
}
}
}
(13) file.list():获得文件夹中所有子文件的文件名,返回字符串数组(例如1.txt)
(14) file.listFiles():获得文件夹中所有的子文件,返回File数组(例如c:/1.text)
public class FileDemo6 {
public static void main(String[] args) throws IOException {
//创建一个文件对象
File file = new File("E:\\JavaWeb开发");
if(file.isDirectory()){
//获得文件夹中所有子文件的文件名
/* String[] fileNames = file.list();
for(String fileName : fileNames){
System.out.println(fileName);
}*/
//获得文件夹中所有的子文件
File[] files = file.listFiles();
for(File subFile : files){
System.out.println(subFile.getName()+":"+(subFile.isFile()?"是文件":subFile.isDirectory()?"是文件夹":"什么都不是"));
}
}
}
}
案例一:扫描所有文件
public class ScannerFile {
public static void main(String[] args) {
/*File file = new File("E:\\JavaWeb开发");
scannerFile(file);*/
//获得磁盘中所有的盘符(根路径)
File[] roots = File.listRoots();
for(File root : roots){
scannerFile(root);
}
}
/**
* 文件扫描方法,在该方法中通过"递归"调用的方式将目录中的所有文件扫描一遍
* 递归算法的核心:
* 1.在方法内部调用本方法自身
* 2.在方法内部必须有退出,让递归停止
* @param file
*/
public static void scannerFile(File file){
if(file==null){
return;//传入的参数为null,当前文件的递归调用停止,退出方法
}
//判断file是文件还是目录
if(file.isFile()){
//是文件
//输出文件的完整路径(绝对路径)
String filePath = file.getAbsolutePath();
System.out.println(filePath);
return;//当前文件的递归调用停止,退出方法
}
//判断file是否为目录
if(file.isDirectory()){
//如果是目录(文件夹),获得目录中的所有子文件
File[] subFiles = file.listFiles();
//判断是否存在子文件
if(subFiles!=null && subFiles.length!=0){
//遍历子文件
for(File subFile : subFiles){
//递归调用(调用本方法)
scannerFile(subFile);
}
}
}
}
}
案例二:查找文件名
public class ScannerFileForSearch {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入要查找的文件名:");
String fileName = input.next();
File file = new File("E:\\JavaWeb开发");
scannerFile(file,fileName);
}
/**
* 文件扫描方法,在该方法中通过"递归"调用的方式将目录中的所有文件扫描一遍
* 递归算法的核心:
* 1.在方法内部调用本方法自身
* 2.在方法内部必须有退出,让递归停止
* @param file
*/
public static void scannerFile(File file,String fileName){
if(file==null){
return;//传入的参数为null,当前文件的递归调用停止,退出方法
}
//判断file是文件还是目录
if(file.isFile()){
//是文件
//if(file.getName().equals(fileName)){//使用文件名精确查找
if(file.getName().toLowerCase().contains(fileName.toLowerCase())){
//输出文件的完整路径(绝对路径)
String filePath = file.getAbsolutePath();
System.out.println(filePath);
}
return;//当前文件的递归调用停止,退出方法
}
//判断file是否为目录
if(file.isDirectory()){
//如果是目录(文件夹),获得目录中的所有子文件
File[] subFiles = file.listFiles();
//判断是否存在子文件
if(subFiles!=null && subFiles.length!=0){
//遍历子文件
for(File subFile : subFiles){
//递归调用(调用本方法)
scannerFile(subFile,fileName);
}
}
}
}
}
案例三:查找扩展名
public class ScannerFileForSearch1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入要查找的扩展名:");
String fileName = input.next();
File file = new File("E:\\JavaWeb开发");
scannerFile(file,fileName);
}
/**
* 文件扫描方法,在该方法中通过"递归"调用的方式将目录中的所有文件扫描一遍
* 递归算法的核心:
* 1.在方法内部调用本方法自身
* 2.在方法内部必须有退出,让递归停止
* @param file
*/
public static void scannerFile(File file,String fileName){
if(file==null){
return;//传入的参数为null,当前文件的递归调用停止,退出方法
}
//判断file是文件还是目录
if(file.isFile()){
//是文件
//if(file.getName().equals(fileName)){//使用文件名精确查找
String fileNames = file.getName();
String extName = fileNames.substring(fileNames.lastIndexOf(".")+1);//区别所在
if(extName.toLowerCase().contains(fileName.toLowerCase())){
//输出文件的完整路径(绝对路径)
String filePath = file.getAbsolutePath();
System.out.println(filePath);
}
return;//当前文件的递归调用停止,退出方法
}
//判断file是否为目录
if(file.isDirectory()){
//如果是目录(文件夹),获得目录中的所有子文件
File[] subFiles = file.listFiles();
//判断是否存在子文件
if(subFiles!=null && subFiles.length!=0){
//遍历子文件
for(File subFile : subFiles){
//递归调用(调用本方法)
scannerFile(subFile,fileName);
}
}
}
}
}