Java从零开始 第13讲 I/O处理和相关操作

本文深入讲解Java中的I/O处理,从java.io.File类的使用,包括文件操作、遍历和过滤,到OutputStream、InputStream、Writer、Reader等流的介绍。讨论了字节流和字符流的区别,以及转换流、打印流和缓存读取流的应用。还涉及异常处理、Properties对象的使用以及对象的序列化和反序列化。
摘要由CSDN通过智能技术生成

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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值