学习笔记:Java_I/O(part_one)
来源:互联网 发布:淘宝直通车权重怎么看 编辑:程序博客网 时间:2024/06/18 11:01
Java_IO(class File)
- Java的IO流这部分,从四月二十七号到三十号,总共学了三天。三天下来IO流当面的代码写了也有几千行,这里做一下详细的总结。总结按照文件类和流两部分分为两篇文章,这是第一篇。
- 我所学到的JavaIO流方面的知识主要是皓铭学长给我推荐的网课和教材中的知识,偏重的中心和实际开发中的中心应该还是有一定的差异。
我所学到的JavaIO流中的知识点分以下几个大部分- File(文件)类
- 文件字节流和文件字符流
- 缓冲流
- 对象流
- 随机读写流
- 打印流
File 类
概述
- File类将文件、文件夹(目录)、路径三部分封装,通过这个类的对象可以获得文件本身的一些信息,比如文件是否存在、所在的目录、读写权限、文件的长度等。
- 文件类对象只负责将数据封装,并不涉及到对文件的读写操作。
文件的路径
- 路径的表示法分为两类,分别是绝对路径和相对路径
- 绝对路径
- 在系统中具有唯一性
- 表示出来是从盘符到文件或目录名的一整个路径
- 相对路径
- 表示路径的相对关系
- 创建文件时如果采用相对路径的创建方法,那么默认新文件创建在当前工程所在的目录,或者当前程序所在的目录下
构造器
- File的构造器并不关心文件是否存在,文件是否存在由File的exist()实例方法负责判断。
- 构造器总共有三类:
- File (String filename);
- File (String directoryPath, String filename);
- File (File f, String filaname);
- 这三种构造器中,第二种更灵活,但是三种都比较常用。第一种构造器中的filename可以是目录也可是文件,而第二种的directoryPath和第三种的f必须是目录。
- Windows系统不区分大小写,而Linux系统区分,这点要注意。
分隔符
- 文件类在建立的时候构造器中路径存在中分隔符,分别是路径分隔符和名称分隔符
* 在编程中用File中的变量代替具体的符号可以体现系统无关性,但是在上课的试验中发现,在windows系统下用”/”可以代替”\”,但是不建议这样做。
常用方法总结
- 文件属性:
* 文件相关方法
也可以删除文件夹,但只能删除空文件夹
删除非空文件夹需要递归(演示代码在下边给出)
- 目录相关方法
过滤器
- 使用过滤器用于public String[] list(FileFilter obj)、public File[] listFiles(FileFilter obj)这两种方法中
- 在使用过滤器时,要向上述两种方法传递一个实现了FilenameFilter接口的对象,其中的FileFilter obj就是过滤器的对象
- 实现FileFilter接口的对象必须实现一个方法public boolean accept(File pathname),这个方法用于测定指定的抽象路径名是否应包含在某个路径列表,也就是说,当它的返回值为true,上述两种方法的返回之中就包含accept()参数中的pathname文件。只有文件符合条件,过滤器才会让文件加入到上述两种方法的返回值中。
部分功能实例代码
1. 递归实现删除非空文件夹
import java.io.File;public class deleteList { private long fileValue; public static void main(String[] args) { new deleteList().deleteUnemptyDirectory(); } private void deleteUnemptyDirectory() { long startTime = System.currentTimeMillis(); File file = new File("d:\\javatest"); if (file.exists() == true) { System.out.println("源目录存在并已定位:\n程序开始运行"); this.fileValue = 0; } else { System.out.println("源文件不存在,请创建文件后重试"); System.exit(0); } this.deleteProcess(file); String print = file.exists() == true ? "\n文件删除失败" : "\n文件删除成功"; System.out.println("程序运行完成" + print +"\n文件夹大小:" + this.fileValue + "\n总计运行时间:\t" + (System.currentTimeMillis() - startTime) + "ms"); } private void deleteProcess(File file) { File[] files = file.listFiles(); for (File temp : files) { if (temp.isDirectory() == true) { deleteProcess(temp); } else { this.fileValue += temp.length(); } temp.delete(); } file.delete(); }}
2. 利用过滤器遍迭代遍历文件夹
import java.io.File;import java.io.FileFilter;public class MyFileFilter implements FileFilter { private int count; public static void main(String[] args) { new MyFileFilter().overRead(); } private void overRead() { File file = new File("d:\\java\\javatest"); System.out.println("第一次遍历开始(不启用过滤器):"); this.count = 0; this.overRead(file); System.out.println("第一次遍历结束:\n获取文件总数:\t" + this.count); System.out.println("\n第二次遍历开始(启用过滤器):" + "选取以 .java 为后缀名的文件"); this.count = 0; this.overReadWithFilter(file); System.out.println("第二次遍历结束:\n获取文件总数:\t" + this.count); } private void overReadWithFilter(File file) { File[] files = file.listFiles(this); for (File temp : files) { if (temp.isDirectory() == true) this.overReadWithFilter(temp); else { this.count++; System.out.println(temp.getAbsolutePath()); } } } private void overRead(File file) { File[] files = file.listFiles(); for (File temp : files) { if (temp.isDirectory() == true) this.overRead(temp); else { this.count++; System.out.println(temp.getAbsolutePath()); } } } public boolean accept(File pathname) { if (pathname.isDirectory() == true) return true; if (pathname.getName().toLowerCase().endsWith(".java") == true) return true; return false; }}
0 0
- 学习笔记:Java_I/O(part_one)
- 学习笔记:Java_I/O(B)
- 学习笔记:Java_I/O(part_two)
- Java_I/O流
- vim实用技巧学习part_one
- Winsock I/O 学习笔记
- Java I/O学习笔记
- Java I/O学习笔记
- I/O流学习笔记
- 【Java学习笔记】I/O
- java I/O 学习笔记
- I/O流学习笔记
- Java I/O 学习笔记(7) new I/O
- JAVA I/O系统学习笔记-部分
- 学习笔记I/O篇之一
- 学习笔记I/O篇之二
- 学习笔记I/O篇之三
- 学习笔记I/O篇之四
- 第4章 Lock的使用
- c# 连接本地的sdf数据库文件
- js原生 获取url参数
- 搭建高性能的PHP Redis开发环境
- digits —segmentation demo
- 学习笔记:Java_I/O(part_one)
- 563. Binary Tree Tilt **
- 去除已排序数列中的重复数--c++实现
- 高仿Mobike个人中心
- Android Intent传递对象 Serializable & Parcelable
- Glide使用详解
- Ubuntu下配置GTK+开发环境
- H2O学习笔记(二)——H2O Flow
- 大数据IMF传奇行动绝密课程第115课:超大规模spark性能优化本质思考