Java基础进阶IO流-File类

简介: Java基础进阶IO流-File类

File类


示例代码01:


public class FileTest01 {
    public static void main(String[] args) {
        File file = new File("file");
        //System.out.println(file.exists());
        //以文件形式创建
        /*if(!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }*/
        //以目录形式创建
        if(!file.exists()) {
            file.mkdir();
        }
        //以多级目录形式创建
        if(!file.exists()){
            file.mkdirs();
        }
        //获取文件父路径
        String parent = file.getParent();
        System.out.println(parent);
        //获取文件绝对路径
        File absoluteFile = file.getAbsoluteFile();
        System.out.println("文件的绝对路径为:" + absoluteFile);
        //获取文件绝对路径
        String absolutePath = file.getAbsolutePath();
        System.out.println("文件的绝对路径为:" + absolutePath);
    }
}


运行结果:


0a2653c851af460fa595bd959398a8f1.png


File类的常用方法


示例代码02:


public class FileTest02 {
    public static void main(String[] args) {
        File file = new File("D:\\必须软件\\毕业设计\\基于JSP的公司文档管理系统的设计与实现.doc");
        //获取文件名
        String fileName = file.getName();
        System.out.println("文件名:" + fileName);
        //判断是否是一个目录
        System.out.println(file.isDirectory());//false
        //判断是否是一个文件
        System.out.println(file.isFile());//true
        //求最后一次修改文件的时间
        long time = file.lastModified();// 这个毫秒是从1970年到现在的总毫秒数。
        // 将总毫秒数转换成日期
        Date date = new Date(time);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss SSS");
        String nowtime = sdf.format(date);
        System.out.println(nowtime + " " +  file.getName());
    }
}


运行结果:


2d65d23f6d4748949b924e4057485923.png


File中的listFiles方法。


示例代码03:


public class FileTest03 {
    public static void main(String[] args) {
        // File[] listFiles()
        // 获取当前目录下所有的子文件。
        File f = new File("D:\Markdown");
        File[] files = f.listFiles();
        // foreach
        for(File file : files){
            //System.out.println(file.getAbsolutePath());
            System.out.println(file.getName());
        }
    }
}


运行结果:


6de278e6d6694ce5bb08e7e842b7e74b.png


使用File类进行目录拷贝


示例代码04:


public class CopyAll {
    public static void main(String[] args) {
        //拷贝源
        File srcFile = new File("E:\\JavaWeb\\技术文档课件");
        //拷贝目标
        File destFile = new File("F:\\");
        //调用拷贝方法开始拷贝
        copyDir(srcFile,destFile);
    }
    /**
     * 拷贝目录
     * @param srcFile 拷贝源
     * @param destFile 拷贝目标
     */
    public static void copyDir(File srcFile, File destFile) {
        //如果拷贝的是文件,递归停止
        if(srcFile.isFile()){
            //SrcFile如果是一个文件的话,递归结束
            //是文件的时候需要拷贝
            //一边读一边写
            FileInputStream in = null;
            FileOutputStream out = null;
            try {
                // 读这个文件
                // E:\JavaWeb\技术文档课件\[尚硅谷]_许刚_javaweb讲义.docx.com
                in = new FileInputStream(srcFile);
                // 写到这个文件中
                // F:\JavaWeb\技术文档课件\[尚硅谷]_许刚_javaweb讲义.docx.com
                String path = (destFile.getAbsolutePath().endsWith("\\") ? destFile.getAbsolutePath() : destFile.getAbsolutePath() + "\\")  + srcFile.getAbsolutePath().substring(3);
                out = new FileOutputStream(path);
                // 一边读一边写
                byte[] bytes = new byte[1024 * 1024]; // 一次复制1MB
                int readCount = 0;
                while((readCount = in.read(bytes)) != -1){
                    out.write(bytes, 0, readCount);
                }
                out.flush();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if(out != null){
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(in != null){
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return;//出错点
        }
        //获取源文件下的子目录
        File[] files = srcFile.listFiles();//出错点
        for(File file : files){//出错点
            // 获取所有文件的(包括目录和文件)绝对路径
            //System.out.println(file.getAbsolutePath());
            if(file.isDirectory()){//出错点
                // 新建对应的目录
                //System.out.println(file.getAbsolutePath());
                //E:\JavaWeb\技术文档课件\[尚硅谷]_许刚_javaweb讲义.docx.com       源目录
                //F:\JavaWeb\技术文档课件\[尚硅谷]_许刚_javaweb讲义.docx.com       目标目录
                String srcDir = file.getAbsolutePath();
                String destDir = (destFile.getAbsolutePath().endsWith("\\") ? destFile.getAbsolutePath() : destFile.getAbsolutePath() + "\\")  + srcDir.substring(3);
                File newFile = new File(destDir);
                if(!newFile.exists()){
                    newFile.mkdirs();
                }
            }
            // 递归调用
            copyDir(file, destFile);//出错点
        }
    }
}


拷贝结果:


8ec4f2997fb246878c34ecd6d122b7c6.png

相关文章
|
5月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
456 6
|
8月前
|
监控 Java API
现代 Java IO 高性能实践从原理到落地的高效实现路径与实战指南
本文深入解析现代Java高性能IO实践,涵盖异步非阻塞IO、操作系统优化、大文件处理、响应式网络编程与数据库访问,结合Netty、Reactor等技术落地高并发应用,助力构建高效可扩展的IO系统。
244 0
|
5月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
251 1
|
7月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
8月前
|
存储 Java Linux
操作系统层面视角下 Java IO 的演进路径及核心技术变革解析
本文从操作系统层面深入解析Java IO的演进历程,涵盖BIO、NIO、多路复用器及Netty等核心技术。分析各阶段IO模型的原理、优缺点及系统调用机制,探讨Java如何通过底层优化提升并发性能与数据处理效率,全面呈现IO技术的变革路径与发展趋势。
180 2
|
7月前
|
SQL Java 数据库连接
Java IO流(一):字节流与字符流基础
本文全面解析Java IO流,涵盖字节流、字符流及其使用场景,帮助开发者理解IO流分类与用途,掌握文件读写、编码转换、异常处理等核心技术,通过实战案例提升IO编程能力。
|
9月前
|
Linux C语言 网络架构
Linux的基础IO内容补充-FILE
而当我们将运行结果重定向到log.txt文件时,数据的刷新策略就变为了全缓冲,此时我们使用printf和fwrite函数打印的数据都打印到了C语言自带的缓冲区当中,之后当我们使用fork函数创建子进程时,由于进程间具有独立性,而之后当父进程或是子进程对要刷新缓冲区内容时,本质就是对父子进程共享的数据进行了修改,此时就需要对数据进行写时拷贝,至此缓冲区当中的数据就变成了两份,一份父进程的,一份子进程的,所以重定向到log.txt文件当中printf和fwrite函数打印的数据就有两份。此时我们就可以知道,
214 0
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
536 23
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
Java 大数据
解析Java中的NIO与传统IO的区别与应用
解析Java中的NIO与传统IO的区别与应用