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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
- linux复习笔记07(兄弟连)----链接命令
- vue 学习 -- day42(vue3 — watchEffect 函数)
- Python 借助装饰器,实现父对象使用子对象的方法!
- QT开发 QT5.15.2安装(换源极速安装)
- appium自动化测试之路Day1——环境的搭建
- 大师学SwiftUI第12章 - 手势 Part 1
- <长篇文章!!>数据结构与算法的重要知识点与概要总结 ( ?? ω ?? )??临近考试和查漏补缺的小伙伴看这一篇就都懂啦~
- Java多线程技术7——线程组
- 润和软件HopeStage与亚信安全云主机深度安全防护系统完成产品兼容性互认证
- 真实工作中,做接口测试的流程一般是怎么样的?一定要学透彻