Java IO流

2023-12-13 04:07:58

Java IO

Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机, Java 仍是企业和开发人员的首选开发平台。
??

课程内容的介绍

1. File
2. IO 流程
????????字节流
????????字符流
????????其他流
3. NIO
??

一、File

文件和目录路径名的抽象表示。
??
1.静态属性
static String pathSeparator
//与系统相关的路径分隔符字符,为方便起见,表示为字符串。
static char pathSeparatorChar
//与系统相关的路径分隔符。
static String separator
//与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。
static char separatorChar
//与系统相关的默认名称分隔符。
package com.bobo.file;

import java.io.File;

public class FileDemo01 {

    /**
     * File
     *     静态属性
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(File.pathSeparator);
        System.out.println(File.pathSeparatorChar);
        System.out.println(File.separator);
        System.out.println(File.separatorChar);
    }
}

? ?

输出结果:

;
;
\
\
??
举例: D:\tools\P4 课程资料 \011 IO Windows 下的路径表示。
D:/tools/P4 课程资料 /011 IO Linux 操作系统下面路径的表示方式和 Windows 中的表示是不一样。
??
2.构造方法
File(File parent, String child)
//从父抽象路径名和子路径名字符串创建新的 File实例。
File(String pathname)
//通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent, String child)
//从父路径名字符串和子路径名字符串创建新的 File实例。
File(URI uri)
//通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
package com.bobo.file;

import java.io.File;

public class FileDemo02 {

    /**
     * File
     *    构造方法
     *      File(File parent, String child)
     *      从父抽象路径名和子路径名字符串创建新的 File实例。
     *      File(String pathname)
     *      通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
     *      File(String parent, String child)
     *      从父路径名字符串和子路径名字符串创建新的 File实例。
     *      File(URI uri)
     *      通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。
     * @param args
     */
    public static void main(String[] args) {
        File f1 = new File("D:\\tools\\io\\b.txt");
        System.out.println(f1);
        File f2 = new File("D:\\tools\\io\\","c.txt");
        System.out.println(f2);
        File f3 = new File("d:/tools/io");
        System.out.println(f3);
        File f4 = new File(f3,"d.txt");

    }
}
D:\tools\io\b.txt
D:\tools\io\c.txt
d:\tools\io
??
相对路径和绝对路径的问题
绝对路径 : 盘符开头 (D: http: ftp:)
相对路径:不以盘符开头
? ?
package com.bobo.file;

import java.io.File;

public class FileDemo03 {

    /**
     * File
     *    相对路径和绝对路径
     * @param args
     */
    public static void main(String[] args) {
        // 绝对路径
        File f1 = new File("d:/tools/io/a.txt");
        // 相对路径
        File f2 = new File("a.txt");
        System.out.println(f2.getAbsolutePath());
        File f3 = new File("src/com/bobo/file/FileDemo03.java");
        System.out.println(f3.getAbsolutePath());
    }
}
??
输出结果:
D:\workspace\IdeaWorkSpace\JavaSEProject14\a.txt
D:\workspace\IdeaWorkSpace\JavaSEProject14\src\com\bobo\file\FileDemo03.java
??
3.File操作
3.1 创建文件
boolean createNewFile()
//当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
boolean mkdir()
//创建由此抽象路径名命名的目录。
boolean mkdirs()
//创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
package com.bobo.file;

import java.io.File;
import java.io.IOException;

public class FileDemo04 {

    /**
     * File
     *    创建文件及文件夹
     * @param args
     */
    public static void main(String[] args) throws IOException {
        File f1 = new File("a.txt");
        // 如果路径有问题 那么就会创建失败  返回true 创建成功  false 说明文件存在创建失败
        boolean b1 = f1.createNewFile();
        System.out.println(b1);
        b1 = f1.createNewFile();
        System.out.println(b1);
        File f2 = new File("test");
        // createNewFile 只能够创建文件 不能够创建文件夹
        b1 = f2.createNewFile();
        System.out.println(b1);

        // 创建文件夹/目录
        File f3 = new File("a");
        b1 = f3.mkdir(); // 创建一个目录  创建成功true  存在 返回false
        System.out.println(b1);
        File f4 = new File("a/b/c/d");
        // 创建的目录的父目录不存在,那么 mkdir是不会创建成功的
        b1 = f4.mkdir();
        System.out.println(b1);
        // mkdirs 如果父目录不存在会先创建该目录
        b1 = f4.mkdirs();
        System.out.println(b1);
    }
}

??
3.2 删除文件
delete 方法可以删除文件和目录,注意: delete 不能删除非空的目录,这时我们就需要逐级的删除文件及文件夹。
boolean delete()
// 删除由此抽象路径名表示的文件或目录
package com.bobo.file;

import java.io.File;

public class FileDemo05 {

    /**
     * File
     *    删除
     * @param args
     */
    public static void main(String[] args) {
        File f1 = new File("a.txt");
        System.out.println(f1.delete());
        File f2 = new File("test");
        System.out.println(f2.delete());
        File f3 = new File("a/b/c/d");
        System.out.println(f3.delete());
        File f4 = new File("a/b/c");
        System.out.println(f4.delete());
    }
}
? ??
3.3 修改功能
File 中的修改其实就是修改 File 名称。
package com.bobo.file;

import java.io.File;
import java.io.IOException;

public class FileDemo06 {
    /**
     * File
     *     修改  renameTo
     * @param args
     */
    public static void main(String[] args) throws IOException {
        // 修改目录的名称
        /*File f1 = new File("a");
        System.out.println(f1.renameTo(new File("hello")));
        // 修改文件的名称
        File f2 = new File("hello/a.txt");
        boolean newFile = f2.createNewFile();
        System.out.println(newFile);*/
        File f2 = new File("hello/a.txt");
        System.out.println(f2.renameTo(new File("User.java")));
    }
}
??
3.4 文件的判断功能
public boolean isFile() 是否文件
public boolean isDirectory() 是否目录
public boolean canRead() 是否可读
public boolean canWrite() 是否可写
public boolean exists() 是否存在
public boolean isHidden() 是否隐藏
public long length() 长度
public String getAbsolutePath() 绝对路径
public String getPath() 定义的路径
public String getName() file名字
public long lastModified() 最后一次修改时间
package com.bobo.file;

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

public class FileDemo07 {

    /**
     * File 判断功能
     *     public boolean isFile()  是否文件
     *     public boolean isDirectory()  是否目录
     *     public boolean canRead()  是否可读
     *     public boolean canWrite()  是否可写
     *     public boolean exists()  是否存在
     *     public boolean isHidden()  是否隐藏
     *     public long length()  长度
     *     public String getAbsolutePath()  绝对路径
     *     public String getPath()  定义的路径
     *     public String getName()  file名字
     *     public long lastModified()  最后一次修改时间
     * @param args
     */
    public static void main(String[] args) {
        File f1 = new File("User.java");
        // 判断是否是文件
        System.out.println(f1.isFile());
        // 判断是否是目录
        System.out.println(f1.isDirectory());
        // 判断是否可读
        System.out.println(f1.canRead());
        // 判断是否可写
        System.out.println(f1.canWrite());
        // 判断是否存在
        System.out.println(f1.exists());
        // 判断是否隐藏
        System.out.println(f1.isHidden());
        // 长度
        System.out.println(f1.length());
        // 获取绝对路径
        System.out.println(f1.getAbsolutePath());
        // 定义的路径
        System.out.println(f1.getParent());
        // 获取文件名称
        System.out.println(f1.getName());
        // 获取最后一次修改时间
        System.out.println(f1.lastModified());
        Date d = new Date(f1.lastModified());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(d));
    }
}
??
输出结果
true
false
true
true
true
false
0
D:\workspace\IdeaWorkSpace\JavaSEProject14\User.java
null
User.java
1607758080631
2020-12-12 15:28:00
??
3.5 遍历功能
获取文件夹下的所有的文件。
String[] list()
//返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter)
//返回一个字符串数组,命名由此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles()
//返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter)
//返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
File[] listFiles(FilenameFilter filter)
//返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
static File[] listRoots()
// 列出可用的文件系统根。
package com.bobo.file;

import java.io.File;

public class FileDemo08 {

    /**
     * File 遍历功能
     *
     * @param args
     */
    public static void main(String[] args) {
        File f1 = new File("D:\\tools\\io");
        // 遍历功能
        String[] list = f1.list();
        for(String fileName : list){
            System.out.println(fileName);
        }
        System.out.println("-----------------------");
        File[] files = f1.listFiles();
        for(File file:files){
            System.out.println(file.getAbsoluteFile());
            System.out.println(file.getName());
            System.out.println(file.length());
            System.out.println("***********");
        }
    }
}
package com.bobo.file;

import java.io.File;
import java.io.FilenameFilter;

public class FileDemo09 {

    /**
     * File 遍历功能
     *
     * @param args
     */
    public static void main(String[] args) {
        File f1 = new File("D:\\tools\\io");
        String[] list = f1.list(new FilenameFilter() {
            /**
             * 添加过滤条件
             * @param dir  目录
             * @param name  文件名称
             * @return
             *    true 获取
             *    false  过滤
             */
            @Override
            public boolean accept(File dir, String name) {
                // System.out.println(dir.getName()+ "----" + name);
                if(name.endsWith(".txt")){
                    return true;
                }
                return false;
            }
        });

        for(String fileName:list){
            System.out.println(fileName);
        }

    }
}
package com.bobo.file;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

public class FileDemo10 {

    /**
     * File 遍历功能
     *
     * @param args
     */
    public static void main(String[] args) {
        File f1 = new File("D:\\tools\\io");
        File[] files = f1.listFiles(new FileFilter() {
            /**
             * 获取目录下的所有的File,然后对File过滤
             * @param pathname
             * @return
             */
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().startsWith("a");
            }
        });
        for (File file:files){
            System.out.println(file.getName());
        }
    }
}
? ?
3.6 课堂案例
判断某个目录下是否有后缀为 .java 的文件,如果有,统计该文件的个数,并输出次文件名称。
package com.bobo.file;

import java.io.File;
import java.io.FileFilter;

public class FileDemo12 {

    /**
     * 判断某个目录下是否有后缀为.java的文件,如果有,统计该文件的个数,并输出次文件名称
     * @param args
     */
    public static void main(String[] args) {
        File path = new File("d:/tools/io/");
        System.out.println(getFileCount2(path,".java"));
    }

    /**
     * 获取目录下特定后缀文件的个数及名称
     * @param srcFile 目录
     * @param suffix  后缀名
     * @return
     */
    public static int getFileCount(File srcFile,String suffix){
        // 统计满足条件的文件的个数
        int count = 0 ;
        File[] files = srcFile.listFiles();
        // 遍历获取每一个文件
        for(File file:files){
            // 获取文件名称
            String fileName = file.getName();
            // 判断
            if(file.isFile() && fileName.endsWith(suffix)){
                // 满足条件  统计自增
                count ++;
                // 打印满足条件的信息
                System.out.println(fileName);
            }
        }
        return count;
    }
    /**
     * 获取目录下特定后缀文件的个数及名称
     * @param srcFile 目录
     * @param suffix  后缀名
     * @return
     */
    public static int getFileCount2(File srcFile,String suffix){
        // 该方式要比第一种方式效率高很多
        File[] files = srcFile.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {

                return pathname.isFile() && pathname.getName().endsWith(suffix);
            }
        });
        for(File file : files){
            System.out.println(file.getName());
        }
        return files.length;
    }
}
??

文章来源:https://blog.csdn.net/m0_52514893/article/details/134903786
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。