File类

本文介绍了Java中File类的基本和深入操作,包括创建、删除、判断文件存在、获取文件信息以及列举目录中的文件。在实际操作中需要注意路径的正确构建、文件的延迟问题以及父路径的存在。此外,还展示了如何处理文件批量改名,以及在处理目录时防止NullPointerException的发生。
摘要由CSDN通过智能技术生成

File类

只是学习笔记,如果有错误,请在评论区指出,谢谢

一、File类基本操作

1.File 与文件操作有关,是compareTo的子类,可以进行排序处理

2.创建文件

package com.yyr.FileText;

import java.io.File;


public class NewFile {
    public static void main(String[] args) throws Exception {
        File fl=new File("c:\\open\\clas.txt");//设置要操作完整路径
        System.out.println(fl.createNewFile());//创建新文件
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U66Du5Gu-1625886617600)(C:\Users\杨怡然\Desktop\图片\75.PNG)]

3.判断文件是否存在

package com.yyr.FileText;

import java.io.File;


public class NewFile {
  public static void main(String[] args) throws Exception {
      File fl=new File("c:\\open\\clas.txt");//设置路径
   
      if (fl.exists()){
          System.out.println("存在");
      }else
          System.out.println("不存在");
  }
}

输出

存在

4.删除文件

package com.yyr.FileText;

import java.io.File;


public class NewFile {
    public static void main(String[] args) throws Exception {
        File fl=new File("c:\\open\\clas.txt");
       
        if (fl.exists()){
            fl.delete();
            System.out.println("执行删除操作");
            if (fl.exists()==false)
                System.out.println("文件已删除");
        }else
            System.out.println("不存在");
    }
}

输出

执行删除操作
文件已删除

结论:File类实现的就是文件本身的处理

二、File类深入操作

1.正常的路径编写.路径分隔符:File.separator

     File fl=new File("c:\\open"+ File.separator +" clas.txt");

结论:这个还是要加个文件目录,不然一样会报出IOException.

2.使用File类进行文件处理的时候要注意:程序>JVM>操作系统函数> 文件处理 ,进行同一文件的删除或创建的时候可能会出现延迟问题,最好别重名,可以使用UUID

3.文件的父路径必须首先存在

​ 如何获取父路径: public File getFile()

​ 创建目录 : public boolean mkdirs()

System.out.println(fl.getParent());//获取父路径,目录必须产生
三、获取文件信息

1.通过File类获取一些文件本身的信息

  • 文件是否可读:System.out.println(“文件是否可读”+File.canRead());
  • 文件是否可写:System.out.println(“文件是否可写”+File.canWrite());
  • 获取文件长度:System.out.println(“文件大小”+File.length());
  • 获取最后的修改时间:File.lastModified())
  • 判断是否是目录:File.isDiretory()
  • 判断是否是文件:File.isFile()
package com.yyr.FileText;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class NewFIle2 {


    public static void main(String[] args) throws Exception {
        File fl=new File("C:\\Users\\Desktop\\图片\\2.PNG");

        System.out.println(fl.getParent());
        System.out.println("文件是否可读"+fl.canRead());
        System.out.println("文件是否可写"+fl.canWrite());
        System.out.println("文件大小"+MathUtil.roud(fl.length()/1024/1024,2));
        System.out.println("最后的修改时间"+new SimpleDateFormat("yyyy--MM--dd HH:mm:ss").format(new Date(fl.lastModified())));
    }
}

class MathUtil{//省略多余小数
    private  MathUtil(){}
    public  static  double roud(double num, int scale){
        return  Math.round(Math.pow(10,scale)*num)/Math.pow(10,scale);
    }
}
四、综合案例

1.列出指定目录中的全部文件

package com.yyr.FileText;
import java.io.File;
public class FileList {
 public static void main(String[] args) {
     File file = new File("c:\\open");
     listDir(file);
 }

 public static void listDir(File file) {
     if (file.isDirectory()) {//目录存在
         File results[] = file.listFiles();//列出目录中的全部内容
         for (int i = 0; i < results.length; i++) {
             listDir(results[i]);
         }
     }
     System.out.println(file);//获得完整路径;
 }
}
c:\open\ clas.txt
c:\open

2)出现NullPointerException,有的目录不能列出

package com.yyr.FileText;

import java.io.File;

public class FileList {
    public static void main(String[] args) {
        File file = new File("c:");
        listDir(file);
    }

    public static void listDir(File file) {
        if (file.isDirectory()) {//目录存在
            File results[] = file.listFiles();//列出目录中的全部内容
            for (int i = 0; i < results.length; i++) {
                listDir(results[i]);
            }
        }
        System.out.println(file);//获得完整路径;

    }
}
Exception in thread "main" java.lang.NullPointerException
	at com.yyr.FileText.FileList.listDir(FileList.java:14)
	at com.yyr.FileText.FileList.listDir(FileList.java:15)
	at com.yyr.FileText.FileList.listDir(FileList.java:15)
	at com.yyr.FileText.FileList.main(FileList.java:8)

Process finished with exit code 1

修改后;

package com.yyr.FileText;
import java.io.File;
public class FileList {
    public static void main(String[] args) {
        File file = new File("c:");
        listDir(file);
    }
    public static void listDir(File file) {
        if (file.isDirectory()) {//目录存在
            File results[] = file.listFiles();//列出目录中的全部内容
            if (results !=null){
                for (int i = 0; i < results.length; i++) {
                    listDir(results[i]);
                }
            }
        }
        System.out.println(file);//获得完整路径;

    }
}

输出目录

c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.smartcardio
c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.sql\ADDITIONAL_LICENSE_INFO
c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.sql\ASSEMBLY_EXCEPTION
c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.sql\LICENSE
c:Program Files\JetBrains\IntelliJ IDEA 2019.3.3\jbr\legal\java.sql

2.文件批量改名:编写程序,程序运行时输入目录名称,并把该目录下的所有文件名后缀修改为.txt

​ 1)注意:能够重命名的文件都是有后缀的,如果没有后缀的,必须追加,如果有后缀的路径,

​ 2)StackOverflowError:栈溢出异常,死循环

package com.yyr.FileText;

import java.io.File;

public class FileRename {
 public static void main(String[] args)throws Exception {

     File file=new File("c:\\open");
     long start=System.currentTimeMillis();
     renameDir(file);
     long end=System.currentTimeMillis();

     System.out.println("花费的时间:"+(end-start));
 }
 public  static  void renameDir(File file){
     if(file.isDirectory()){
         File results []=file.listFiles();//列出子目录中的内容
         if (results!=null){
             for (int i = 0; i < results.length; i++) {
              renameDir(results[i]);
             }
         }
     }
     else{
         if (file.isFile()){
             //如果是文件进行重命名
            String filename=null;
            if(file.getName().contains(".")){
                filename=file.getName().substring(0,file.getName().lastIndexOf("."))+".txt";

            }
            else
            {
                filename=file.getName()+".txt";
            }
            File newFile=new File(file.getParentFile(),filename);//新的文件名称
             System.out.println(filename);
             file.renameTo(newFile);
         }
     }

 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值