文章目录

  • 前言
  • 一、File类
  • 二、使用File
  • 1.构造方法
  • 2.常用方法
  • 三 代码实践
  • 1.
  • 2.



前言

IO流:
程序在内存运行, 变量, 数组,对象,集合…都是存在内存中.

内存存储: 临时存储, 一旦程序结束,这个程序所占用内存全部释放

硬盘/U盘. 其他存储设备: 存储数据, 永久性, 持久化


一、File类

表示存储设备中的一个文件或者文件夹(目录), IO流下的类位于java.io包

> 作用:  对文件/文件夹的操作(新增,删除, 读取文件/文件夹相关信息), 不能对文件的内容进行操作

>文件/文件夹:    路径:    上级目录与下级目录之间有分割符
>
>不同操作系统路径分隔符不一样:
>
>      windows操作系统:  `\`     在java中, 转义符:=(\n)的开始符号,  在java代码中, 写成 `\\`
>
>      linux操作系统:   `/`   
>
>但是: 在java中可以正确的处理不同系统中的分隔符。
>
>File类提供了  static  final   String  pathSeparator

二、使用File

1.构造方法

java 位置 写入文件 java文件存储位置_文件名

/**
 * File类
 */
public class FileDemo1 {
    public static void main(String[] args) {
        //创建一个File对象,  可以是文件/文件夹
        //创建一个File对象, 代表的是本地电脑上d盘上test/hello.txt
        //hello.txt的完整路径: String
        //File file1 = new File("D:\\test\\hello.txt");  //windows的分隔符
        //写成linux的分隔符
        File file1 = new File("D:/test/hello.txt");  //文件

        //File(File parent, String child)
        //根据上级目录与文件名创建一个File
        //上级目录的File对象
        File parent = new File("D:/test"); //文件夹
        File file2 = new File(parent,"hello.txt");

       //File(String parent, String child)
        File file3 = new File("D:/test","hello.txt");
    }
}

2.常用方法

>判断FIle是否是文件
>
>boolean  isFile()    true: 是文件   false: 不是文件, 就是文件夹



>判断File是否是文件夹
>
>boolean  isDirectory()   true: 是文件夹   false: 不是文件夹, 就是文件

>获取文件名/文件夹名
>
>String getName()
>
>

>获取上级目录:
>
>String getParent()   上级目录路径字符串
>
>File  getParentFile()  上级目录File对象

>获取文件/文件夹的绝对路径:   从盘符开始
>
>String  getAbsolutePath()
>
>File getAbsolutePathFile()

>获取文件/文件夹最后一次修改时间(毫秒值)
>
>long  lastModified()

>判断文件是否存在:
>
>boolean   exists()   true: 存在, false: 不存在   **重要**
>
>获取文件大小: 字节, 不存在: 0L
>
>long  length() 
>
>
>
>创建文件:
>
>boolean  createNewFile()   只能创建文件   true: 创建成功,  false: 创建文件

>
>
>删除文件/文件夹
>
>boolean  delete()    true 删除成功, false: 删除失败    **重要**
>
>注意: 删除文件夹,要求这个文件夹必须是空文件夹, 这个文件夹不包含子文件或者子文件夹
>
>
>
>创建文件夹
>
>boolean  mkdir()    创建文件夹   true创建成功   false创建失败(这个文件夹已存在, 上级目录不存在)
>
>    mkdir() 只能创建本级文件夹, 不能创建上级目录
>
>
>
>boolean  mkdirs()  创建文件夹  true创建成功   false创建失败(这个文件夹已存在)    **推荐 ** **重要**
>
>    mkdirs() 创建本级文件夹, 如果所有上级目录都存在, 创建所有上级目录

获取这个文件夹的子文件、子文件夹

java 位置 写入文件 java文件存储位置_java_02


如果想获取某个文件夹下所有的后代文件/文件夹(包括: 子,孙,…) 使用递归

三 代码实践

eg:在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,再创建一个目录IOTest,;之后遍历IOTest这个目录下的文件.

1.

public class IOS {
    public static void main(String[] args) throws IOException {
        //创建一个File对象, 代表的是本地电脑上d盘上
        File file = new File("D:/HelloWorld.txt");
        //判断文件是否存在
        if(file.exists()){
            if(file.isFile()){
                //打印文件名
                System.out.println("它是:"+file.getName()+"文件");
                //获取文件大小  length()  文件的长度(以字节为单位),如果文件不存在, 0L
                System.out.println("文件大小:"+file.length()+"字节");
                //获取上级目录 getParent()
                System.out.println("file的上级目录::"+file.getParent());
                //获取绝对路径:
                System.out.println("file的绝对路径::"+file.getAbsolutePath());
                System.out.println("file的绝对路径::"+file.getPath());

                //上一次修改时间lastModified()
                System.out.println("file上一次的修改时间::"+file.lastModified());
                //删除
                //file.delete();
            }if(file.isDirectory()) {
                System.out.println("它是:"+file.getName()+"文件夹");
            }
        }else {
            boolean newFile = file.createNewFile();
            if (newFile){
                System.out.println("创建成功");
            }else {
                System.out.println("创建失败");//1.上级目录不存在  //2.这个文件已存在
            }
        }
        //创建一个File对象, 代表的是本地电脑上d盘上
        File file1 = new File("D:/IOTest");
        if(file1.exists()){ //存在
            //删除 delete()
//            boolean isOk =  file1.delete();
//            if(isOk){
//                System.out.println("删除成功");
//            }else{
//                System.out.println("删除失败");
//            }

            //获取子文件/子文件夹路径    String[]  list()
            String[] subFilePaths  = file1.list();
            for (String subFilePath : subFilePaths) {
                System.out.println(subFilePath);
            }
            System.out.println("============");
            //只要获取文件  list( FilenameFilter filter)   根据文件名过滤
            //遍历文件夹的子文件/子文件夹  每获取一个子; 调用accept() 判断这个子文件/文件夹是否需要, 如果返回true, 需要  如果返回false, 过滤
            String[] subFilePaths1  = file1.list(new FilenameFilter() {
                /**
                 *
                 * @param dir  上级目录
                 * @param name  文件名/文件夹名称
                 * @return
                 */
                @Override
                public boolean accept(File dir, String name) {
                    //只要获取文件
                    // return true;
                    //如果是文件返回true, 不是文件返回false   isFile()
                    System.out.println(dir.getName());
                    System.out.println(name);
                    System.out.println("=============");
                    //构建一个子文件/文件夹的File
                    File subFile = new File(dir,name);
                    boolean rs =  subFile.isFile() && name.endsWith(".txt");
                    return rs;
                }
            });
            for (String subFilePath2 : subFilePaths1) {
                System.out.println(subFilePath2);
            }
            
        }else{
            //如果不存在, 创建文件夹
            boolean isOk = file1.mkdirs();
            if(isOk){
                System.out.println("创建成功");
            }else{
                System.out.println("创建失败");
            }
        }
    }
}

2.

public class IO2 {
    public static void main(String[] args) {
        File file = new File("D:/IOTest");
        //获取子文件/子文件夹的File对象    File[]  listFiles()
        File[] subFiles1  = file.listFiles();
        for (File subFile : subFiles1) {
            System.out.println(subFile.getName());
            System.out.println("=====");
        }
        System.out.println("-------");
        //获取的目录  根据文件名称过滤,  accept()  name 文件名称
        File[] subFiles2  = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                File childFile = new File(dir,name); //根据文件名创建File
                return childFile.isDirectory();
            }
        });

        //FileFilter  根据文件过滤,   accept()  File pathname 就是子文件/子文件夹的File对象
        File[] subFiles  = file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                System.out.println(pathname.getName());
                return pathname.isDirectory();
            }
        });
        for (File subFile : subFiles2) {
            System.out.println(subFile.getName());
            System.out.println("==");
        }
    }
}