第15章_File类与IO流 1

第15章_File类与IO流 1

1.File类的理解

  • File类位于java.io包下,本章中涉及到的相关流也都声明在java.io包下。
  • File类的一个对象,对应与操作系统下的一个文件或一个文件目录(或文件夹)
  • File类中声明了新建、删除、获取名称、重命名等方法,并没有涉及到文件内容的读写操作。要想实现文件内容的读写,我们就需要使用io流。
  • File类的对象,通常是作为io流操作的文件的端点出现的。
    • 代码层面,将File类的对象作为参数传递到IO流相关类的构造器中。

1.2构造器

  • public File(String pathname) : 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
  • public File(String parent,String child): 以parent为父路径,child为子路径创建File对象。
  • public File(File parent,String child)︰根据一个父File对象和子文件路径创建File对象
    /*
    文件的路径表示方式:
        方式1:绝对路径:以windows操作系统为例,包括盘符在内的文件或文件目录的完整路径。
        方式2:相对路径:相对于某一个文件目录来讲的相对的位置。
        在IDEA中,如果使用单元测试方法:相对于当前的module来讲
        如果使用main(()方法:相对于当前的project来讲

     */
    public void test1(){
    //public File(String pathname)
        File file1 = new File("d:/io/hello.txt");
        File file2 = new File("abc");
        System.out.println(file2.getAbsoluteFile());

    }
    //public File(String parent,String child)
    public void test2(){
        //参数1:一定是一个文件目录
        //参数2:可以是一个文件,也可以是一个文件目录
        File file = new File("d:\\io", "abc.txt");
        File file1 = new File("abc", "a12");

    // public File(File parent,String child)
    //参数1:一定是一个文件目录
    //参数2:可以是一个文件,也可以是一个文件目录
        File file2 = new File(file1, "ab12");
    }

1.3常用方法

1、获取文件和目录基本信息

  • public String getName():获取名称
  • public String getPath():获取路径
  • public String getAbsolutePath():获取绝对路径.
  • public File getAbsoluteFile():获取绝对路径表示的文件
  • public String getParent():获取上层文件目录路径。若无,返回null
  • public long length():获取文件长度(即:字节数)。不能获取目录的长度。
  • public long lastModified():获取最后一次的修改时间,毫秒值
    public void test3(){
        File file = new File("hello.txt");
        System.out.println(file.getName());//hello.txt
        System.out.println(file.getPath());//hello.txt
        System.out.println(file.getAbsolutePath());//F:\科技为你\Java\尚硅谷Java入门\code\JavaSE2\jichuyufa\hello.txt
        System.out.println(file.getAbsoluteFile());//F:\科技为你\Java\尚硅谷Java入门\code\JavaSE2\jichuyufa\hello.txt
        System.out.println(file.getParent());//null
        System.out.println(file.getAbsoluteFile().getParent());//F:\科技为你\Java\尚硅谷Java入门\code\JavaSE2\jichuyufa

        System.out.println(file.length());//0
        System.out.println(file.lastModified());//0
    }

2、列出目录的下一级

  • public String] list()∶返回一个string数组,表示该File目录中的所有子文件或目录。
  • public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录
    public void test4(){
        File file = new File("F:\\科技为你\\Java\\尚硅谷Java入门");
        String[] listArr = file.list();
        for (String s : listArr) {
            System.out.println(s);//code
        }

        System.out.println();
        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1);//F:\科技为你\Java\尚硅谷Java入门\code
        }
    }

3、File类的重命名功能

public boolean renameTo(File dest):把文件重命名为指定的文件路径。

 public void test5(){
        File file = new File("hello.txt");
        File file1 = new File("aaa.txt");
       // File file1 = new File("d:/aaa.txt");

        /*
        举例:
file1.renameTo(file2)∶要想此方法执行完,返回true。要求:
file1必须存在,且file2必须不存在,且file2所在的文件目录需要存在。

         */
        boolean rename = file.renameTo(file1);
        System.out.println(rename?"重命名成功":"重命名失败");
    }

4、判断功能的方法

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录。
  • public boolean isFile() :此File表示的是否为文件。
  • public boolean canRead():判断是否可读
  • public boolean canWrite():判断是否可写.
  • public boolean isHidden():判断是否隐藏
  public void test6(){
        File file1 = new File("aaa.txt");
        System.out.println(file1.exists());//true
        System.out.println(file1.isDirectory());//false
        System.out.println(file1.isFile());//true
        System.out.println(file1.canRead());//true
        System.out.println(file1.canWrite());//true
        System.out.println(file1.isHidden());//false
    }

5.创建、删除功能

  • public boolean createNewFile():创建文件。若文件存在,则不创建,返回false。
  • public boolean mkdir():创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
  • public boolean mkdirs():创建文件目录。如果上层文件目录不存在,一并创建。
  • public boolean delete():删除文件或者文件夹
    删除注意事项:①Java中的删除不走回收站。②要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录。
    public void test7() throws IOException {
        File file = new File("F:\\io\\hello/xx.txt");
        //测试文件的创建、删除

        if (!file.exists()){
            boolean isnewFile = file.createNewFile();
            if (isnewFile){
                System.out.println("创建成功");
            }
        }else {
            System.out.println("此文件已经存在");
        }

        System.out.println(file.delete()?"文件删除成功":"文件删除失败");
    }

    public void test8(){
        File file = new File("F:\\io\\hi");
        System.out.println(file.mkdir()?"创建文件目录成功":"创建文件目录失败");
        //前提: f :/io文件目录存在,hi目录是不存在的。

    }

    public void test9(){
        File file = new File("F:\\io\\uu/yy");
        System.out.println(file.mkdir()?"创建文件目录成功":"创建文件目录失败");
        //前提: f :/io文件目录存在,hi目录是不存在的。

        File file1 = new File("F:\\io\\oo/pp");
        System.out.println(file1.mkdirs()?"创建文件目录成功":"创建文件目录失败");
    }

判断指定目录下是否有后缀名为.jpg的文件

public class Exer02 {
/*
*判断指定目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称**/

public void test1(){
File dir = new File( pathname: "F:1110-图片");
String[] listFiles = dir.list();
for(String s : listFiles){
if(s.endsWith(".jpg")){
system.out.println(s);
	}
}
}
===========
    //方式2:
/ / public String[] list(FilenameFilter filter)
String[ ] listFiles = dir.list(new FilenameFilter() {
Override
public boolean accept(File dir,String name) {//name:即为子文件或子文件目录的名称
//if( name.endsWith( ".jpg")){
//return true;
//}else{
//return false;
//}
return name. endswith( " .jpg" );
}
});

练习;
遍历指定文件目录下的所有文件的名称,包括子文件目录中的文件。
public void printFileName(File file)//file可能是文件,也可能是文件目录

public void printFileName(File file){
if(file.isFile()){
system.out.println(file.getName() );
}else if(file.isDirectory(){
File[] files = file.listFiles();
    for(File f : files){
printFileName(f);//递归
}
}
}

posted @   新至所向  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示