Java从零开始 第13讲 I/O处理和相关操作
IO流
I/O和IO通常都指代的是计算机中的输入(input)和输出(output)操作,在学习一门语言时,总是不可避免的需要学习IO操作
如果你学习过计算机网络,你可以发现通常将数据的传输称之为流(stream),且传输时都通过二进制0/1传输,而文件的数据传输则可以被成为文件IO流,你将文件从c盘传输到e盘的过程也可以看作一个流,此时对c盘来说是文件的流出,是输出流,而对e盘来说则是文件的流入,是输入流。基础传输的数据类型,也可以将流分为字节流和字符类,字节通过ASCII类表格转化,而字符则通过Unicode
Java中的IO操作都通过java.io包下的类来完成,其中字节流中输入流的顶级父类为InputStream,输出流为OutputStream;而字符流中输入流父类则是Reader,输出流父类为Writer
本讲中将会先介绍IO中最简单的是用于增加,删除,和修改(仅限于修改文件名和路径)的java.io.File,而后则是顺序介绍上述的四个类
java.io.File
File类,可以用于抽象的表示一个文件及其路径,使用File类中的方法,能够做到增删你电脑中的文件(真的会删!且无法通过回收站找回,谨慎操作)
File有三个常用的构造方法:
File(String pathname);// 输入文件的路径
File(File parent, String child);
// parent表示所在文件夹,如果parent创建了一个文件,则异常
File(String parenet, String child);// 通过路径输入parent
注意在声明路径的格式为
c://文件夹名//文件夹名…//文件名
File dir = new File(“d://haha//hahaha”);
这就表明在D盘中,haha文件夹下的hahaha文件,注意此时haha必须存在,否则报错,而hahaha可以不存在,通过之后的方法还可选择创建hahaha为文件夹或者文件
如果创建文件对象时没有磁盘,就默认该对象为相对路径,相对路径指的是从存储Java项目的文件夹位置开始的路径
也有许多常用方法
boolean createNewFile() throws IOException;// 根据对象创建文件
boolean mkdir();// 根据对象创建父文件夹
boolean mkdirs();// 创建所有不存在的文件夹
boolean delete();// 删除文件
String getAbsolutePath();// 获取绝对路径
String getName();// 获取文件名
String getParent();// 获取其文件夹
File getParentFile();//获取文件夹对象
String getPath;// 获取字符串路径
long length();//获取文件长度,以byte为单位
String[] list();// 获取文件夹中的所有文件
File[] listFiles();// 获取为File对象格式
boolean isFile();// 是否是一个文件
boolean isDirectory;// 是不是一个文件夹
File renameTo(File file);
// 将文件对象重命名为另一个对象,使用此方法时可以更改路径和文件名,且原文件会被删除
File类中还有几个静态属性,为File.separator和File.pathSeparator,它们其实就是\和;,当操作需要使用这两个符号时,就是用它们执行的
遍历
在学完File类之后,其实我们就能通过其中的方法对文件进行一些基础的操作了
遍历(traversal)在这里指将指定路径中的所有文件进行扫描
现在思考一个问题,通过File类如何完成对一个磁盘的遍历,找到并输出所有的大于10M且后缀为.exe的文件
代码如下:
import java.io.File;
public class IOBasic {
public static void main(String[] args) {
File dir = new File("d://");
File[] files = dir.listFiles();
listFiles(files);
}
public static void listFiles(File[] files){
if(files != null && files.length > 0){// 文件不为空且大小大于0
for(File file:files){// 查找所有文件
if(file.isFile()){// 确定是文件
if(file.length() > 10*1024*1024){// 大小大于10M
if(file.getName().endsWith(".exe")) // 文件以.exe结尾
System.out.println