java学习笔记-io篇:文件与目录(代码片段)

笑虾 笑虾     2022-12-06     623

关键词:

Java 学习笔记 - IO篇:文件与目录

File 介绍

  • File 作为一个工具类,没有太多要学习的东西。把方法过一遍知道它能干啥,到于默认没有给解决方案的遍历操作,也给出了参考示例。
  1. 文件目录路径名的抽象表示形式。(所以它操作的都是对文件的描述,而不是文件内容。)
  2. 可用于文件、目录创建、删除mkdirs可创建多级目录。但默认无递归删除目录的方法。
  3. 可以获取目录内容列表,用于遍历
  4. 可以判断:存在可读可写是文件是目录可见
  5. 复制功能看参考资料
  • 另外 Java7 加了新工具类 java.nio.file.Files 对文件操作进行了增加,除了没有抢File作为文件抽象的工作。
  1. 增删改查都能做。
  2. 还能复制、移动文件。
  3. Java8时,又给它加了一个static Stream<String> lines(Path path),配合流按行读取文本非常方便(它还有一个指定字符集的重载)。

所以跟牛夫人说拜拜吧。

增删改

方法说明
boolean mkdir()创建此抽象路径名指定的目录。
boolean mkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
boolean createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
static File createTempFile(String prefix, String suffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。
static File createTempFile(String prefix, String suffix, File directory)在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。
boolean delete()删除此抽象路径名表示的文件或目录。
void deleteOnExit()在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
boolean setLastModified(long time)设置此抽象路径名指定的文件或目录的最后一次修改时间。

递归删除 Java7 Files

注意别写错路径啊,真的会删光的!!!

/**
 * 递归删除整个文件夹内容
 * java7 的 Files.walkFileTree + FileVisitor 实现。
 */
private static void recursionDelByFilesWalkFileTree(Path dir) throws IOException 
    Files.walkFileTree(dir, new SimpleFileVisitor<Path>() 
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException 
            file.toFile().setWritable(true); // 解决只读文件删不动的问题
            Files.delete(file);              // 删除
            return FileVisitResult.CONTINUE;
        
        @Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException 
            dir.toFile().setWritable(true); // 解决只读文件删不动的问题
            Files.delete(dir);              // 删除
            return FileVisitResult.CONTINUE;
        
    );

@Test
public void recursionDelTest() throws IOException 
    Path dir = Paths.get("E:\\\\jerry\\\\test\\\\temp\\\\aa\\\\bb\\\\cc\\\\dd"); // 但愿你的系统没装在这个目录下。
    recursionDelByFilesWalkFileTree(dir);

状态检测

方法说明
boolean canExecute()测试应用程序是否可以执行此抽象路径名表示的文件。
boolean canRead()测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite()测试应用程序是否可以修改此抽象路径名表示的文件。
boolean equals(Object obj)测试此抽象路径名与给定对象是否相等。
boolean exists()测试此抽象路径名表示的文件或目录是否存在。
boolean isAbsolute()测试此抽象路径名是否为绝对路径名。
boolean isDirectory()测试此抽象路径名表示的文件是否是一个目录。
boolean isFile()测试此抽象路径名表示的文件是否是一个标准文件。
boolean isHidden()测试此抽象路径名指定的文件是否是一个隐藏文件。

设置权限

方法说明
boolean setReadable(boolean readable)设置此抽象路径名所有者读权限的一个便捷方法。
boolean setReadable(boolean readable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的读权限。
boolean setReadOnly()标记此抽象路径名指定的文件或目录,从而只能对其进行读操作。
boolean setWritable(boolean writable)设置此抽象路径名所有者写权限的一个便捷方法。
boolean setWritable(boolean writable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的写权限。
boolean setExecutable(boolean executable)设置此抽象路径名所有者执行权限的一个便捷方法。
boolean setExecutable(boolean executable, boolean ownerOnly)设置此抽象路径名的所有者或所有用户的执行权限。

获取文件信息

方法说明
int compareTo(File pathname)按字母顺序比较两个抽象路径名。
File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。
String getAbsolutePath()返回此抽象路径名的绝对路径名字符串。
File getCanonicalFile()返回此抽象路径名的规范形式。
String getCanonicalPath()返回此抽象路径名的规范路径名字符串。
long getFreeSpace()返回此抽象路径名指定的分区中未分配的字节数。
String getName()返回由此抽象路径名表示的文件或目录的名称。
String getParent()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。
File getParentFile()返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
String getPath()将此抽象路径名转换为一个路径名字符串。
long getTotalSpace()返回此抽象路径名指定的分区大小。
long getUsableSpace()返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
int hashCode()计算此抽象路径名的哈希码。
long lastModified()返回此抽象路径名表示的文件最后一次被修改的时间。
long length()返回由此抽象路径名表示的文件的长度。
String toString()返回此抽象路径名的路径名字符串。
URI toURI()构造一个表示此抽象路径名的 file: URI。
URL toURL()已过时。 此方法不会自动转义 URL 中的非法字符。建议新的代码使用以下方式将抽象路径名转换为 URL:首先通过 toURI 方法将其转换为 URI,然后通过 URI.toURL 方法将 URI 装换为 URL。
———————————————

遍历目录

方法说明
static File[] listRoots()列出可用的文件系统根。
String[] list()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter)返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter)返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。

FilenameFilter 过滤

dir 当前被检测的目录;
name 目录or文件的名称;

@Test
public void Demo56Test() 
    String path = "E:\\\\工作文档\\\\花垣县社会服务与管理网格化平台_20211013-\\\\源码分析";
    File file = new File(path);
    File[] files = file.listFiles(new FilenameFilter() 
        @Override
        public boolean accept(File dir, String name) 
            return name.endsWith(".md"); // 获取所有 markdown 文件
        
    );
    System.out.println(Arrays.toString(files));

FileFilter过滤

pathname 抽象路径名

@Test
public void Demo60Test() 
    String path = "E:\\\\工作文档\\\\花垣县社会服务与管理网格化平台_20211013-\\\\源码分析";
    File file = new File(path);
    File[] files = file.listFiles(new FileFilter() 
        @Override
        public boolean accept(File file) 
            if (file.isFile()) 
                return file.getName().endsWith(".md");
            
            return true;
        
    );
    System.out.println(Arrays.toString(files));

参考资料

笑虾:Java 学习笔记 - IO篇:复制文件
笑虾:Java 学习笔记 - Spring工具类:FileCopyUtils、StreamUtils

java.io.File
Interface FileFilter
Interface FilenameFilter

java学习笔记-io篇:读写文本文件txt(代码片段)

Java学习笔记-IO篇:读写文本文件txt读字符FileReader逐字读取BufferedReader逐行读取Scanner逐行读取StringReaderProperties读配置文件FileInputStream读UTF-8字符集读取整个文件到byte[]字节流转字符流Java7-Files读取整个文件到byte[]读取整个文件... 查看详情

java学习笔记-io篇:对象流objectinputstreamobjectoutputstream(代码片段)

Java学习笔记-IO篇:对象流ObjectInputStream、ObjectOutputStreamObjectOutputStreamObjectInputStream序列化、反序列化序列化writeObject将对象写入磁盘文件反序列化readObject取出对象自定义Serializable对象writeObject、readObjectputFields、readFiel 查看详情

java学习笔记-io篇:对象流objectinputstreamobjectoutputstream(代码片段)

Java学习笔记-IO篇:对象流ObjectInputStream、ObjectOutputStreamObjectOutputStreamObjectInputStream序列化、反序列化序列化writeObject将对象写入磁盘文件反序列化readObject取出对象自定义Serializable对象writeObject、readObjectputFields、readFiel 查看详情

java学习笔记-io篇:常见的io流stream以及相互关系(代码片段)

Java学习笔记-IO篇:常见的【IO流Stream】以及相互关系1.常见流1.1流的分类1.1.1节点流1.1.2处理流1.1.3流的特点小结2.流的基本操作读操作写操作跳过指定长度开始读mark、reset操作检测关闭3.流示例文件流1.FileInputStream、FileOutputStre... 查看详情

java学习笔记-io篇:常见的流stream通道channl以及相互关系(代码片段)

Java学习笔记-IO篇:常见的【流Stream】【通道Channl】以及相互关系常见流流的分类节点流处理流流之间的关系流的基本操作读操作写操作mark、reset操作检测、判断通道参考资料常见流分类字节输入流字节输出流字符输入流字符... 查看详情

leetcode与《代码随想录》数组篇:做题笔记与总结-java版(代码片段)

代码随想录地址是学习过程中的笔记!图来自代码随想录。文章目录理论题目704.二分查找35.搜索插入位置34.在排序数组中查找元素的第一个和最后一个位置69.x的平方根367.有效的完全平方数理论数组是存放在连续内存空间上... 查看详情

java学习笔记-复制文件(代码片段)

Java学习笔记-复制文件二进制方式复制org.apache.commons.io.FileUtils工具类★复制单个文件★递归复制整个文件夹内容FileInputStream、FileOutputStream实现BufferedInputStream、BufferedOutputStream实现FileChannel实现Java7的Files.copy实现Java7的Files.walkFileTr... 查看详情

ios学习笔记--数据存储(代码片段)

iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3CoreData1.XML属性列表(plist)归档每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系... 查看详情

java学习笔记3(datawhale教程)(代码片段)

java学习笔记3(datawhale教程):类与方法,继承与多态,抽象类与接口文章目录java学习笔记3(datawhale教程):类与方法,继承与多态,抽象类与接口一.类与方法1.类与对象2.成员变量3.成员方法语法格式来看例子成员方法的参数值参数引用参数... 查看详情

jvm学习笔记内存与垃圾回收篇(代码片段)

一、JVM与java体系结构1虚拟机的结构2java的编译  有句话说java是半编译半解释型语言,因为从*.java到*.class文件的过程是编译。而*.class文件的运行是解释。  但其实*.class文件的运行过程是半编译半解释的。有些需要反复... 查看详情

jvm学习笔记内存与垃圾回收篇(代码片段)

一、JVM与java体系结构1虚拟机的结构2java的编译  有句话说java是半编译半解释型语言,因为从*.java到*.class文件的过程是编译。而*.class文件的运行是解释。  但其实*.class文件的运行过程是半编译半解释的。有些需要反复... 查看详情

学习笔记hadoop——虚拟机安装java安装(代码片段)

文章目录一、虚拟机安装1.1、了解一下概念1.2、安装流程二、java安装2.1、了解2.2、安装流程一、虚拟机安装1.1、了解一下概念操作系统操作系统(operationsystem,简称OS)是管理计算机硬件与软件资源的计算机程序。操... 查看详情

《微型计算机原理与接口技术》期末总复习——一篇匆匆忙忙的复习笔记(代码片段)

...理与接口技术》后面几章的前面的汇编复习内容在“零、学习笔记总目录”的“汇编考前复习”中✅这篇笔记中可能存在一些错误,欢迎在留言区提出,笔者会及时更正。所有内容更正、更新请看“六、更新内容”文章... 查看详情

typescript学习笔记(代码片段)

最近想先学完typescript再去学习vue3,感觉会比较好~开发环境搭建1.新建目录进入目录输入命令npminit(需要自己配置)或者npminit-y(npm默认配置)2.创建src目录目录结构大致如下utils——存放业务相关的可复用方法tools——存放跟业务无... 查看详情

io流学习笔记(代码片段)

文章目录IO流,什么是IOIO流的分类javaio的四大家族需要掌握的十六个流FileInputStream(从文件中读)往byte数组中读FileInputStream中一些其他的方法FileOutputStream的使用(往文件中写)文件拷贝FileReader(字符输入流使用方法)FileWriter(字符... 查看详情

java学习笔记1(datawhale教程):基本数据类型与变量(代码片段)

java学习笔记1(datawhale教程):基本数据类型与变量这是今年datawhale7月组队学习的开源内容,当时没有报,现在去学一学😄👉链接同时结合了runoob上的教程:https://www.runoob.com/java/java-basic-syntax.html文章目录java学习笔记1... 查看详情

java的第一遍学习笔记io流(代码片段)

文件常见的文件操作 方式一publicstaticvoidmain(String[]args)FilenewFile2=newFile("d:\\\\news2.txt");//一个\\为转义字符trynewFile2.createNewFile();//会抛出一个异常,返回值是一个布尔值System.out.println("文件创建成功" 查看详情

网络安全篇php文件与目录操作(一文带你手撕迷茫)(代码片段)

🏆今日学习目标:🍀学习PHP文件与目录操作✅创作者:贤鱼⏰预计时间:25分钟🎉个人主页:贤鱼的个人主页🔥专栏系列:网络安全🍁贤鱼的个人社区,欢迎你的加入贤鱼摆烂团PHP文... 查看详情