博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java进阶8——IO流
阅读量:2351 次
发布时间:2019-05-10

本文共 4311 字,大约阅读时间需要 14 分钟。

File类

File概述

File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。

File类的构造函数

File(String pathname); // 将一个字符串路径封装成File对象File(String parent,String child); // 根据指定的父路径和文件路径创建File对象// 例如:File file = new File("F://", "a.txt");最终file对象的路径就是F:/a.txtFile(File parent,String child); // 根据指定的父路径对象和文件路径创建File对象/* 例如: *  File file = new File("F://"); *  File file2 = new File(file , "a.txt"); *  最终file对象的路径就是F:/a.txt */

构造方法只是创建一个File对象,在磁盘上并没有创建对应的文件

File类创建和删除功能

以下功能会对磁盘上的对应的文件进行创建或删除操作

boolean createNewFile(); // 指定路径不存在该文件时时创建文件,返回true,否则返回falseboolean mkdir(); // 当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false  boolean mkdirs(); // 当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回falseboolean delete(); // 删除文件或者删除单级文件夹

File类的判断功能

boolean exists(); // 判断指定路径的文件或文件夹是否存在boolean isAbsolute(); // 判断当前路路径是否是绝对路径boolean isDirectory(); // 判断当前的目录是否存在boolean isFile(); // 判断当前路径是否是一个文件boolean isHidden(); // 判断当前路径是否是隐藏文件

File类的获取功能和修改名字功能

File getAbsoluteFile(); // 获取文件的绝对路径,返回File对象String getAbsolutePath(); // 获取文件的绝对路径,返回路径的字符串String getParent(); // 获取当前路径的父级路径,以字符串形式返回该父级路径File getParentFile(); // 获取当前路径的父级路径,以字File对象形式返回该父级路径String getName(); // 获取文件或文件夹的名称String getPath(); // 获取File对象中封装的路径long lastModified(); // 以毫秒值返回最后修改时间long length(); // 返回文件的字节数boolean renameTo(File dest); // 将当前File对象所指向的路径 修改为 指定File所指向的路径

File类的其它获取功能

String[] list(); // 以字符串数组的形式返回当前路径下所有的文件和文件夹的名称File[] listFiles(); // 以File对象的形式返回当前路径下所有的文件和文件夹的名称static File[] listRoots(); // 获取计算机中所有的盘符

字符流与字节流

概述

IO流分类:    流向        输入流 读取数据    FileReader  Reader        输出流 写出数据    FileWriter  Writer    数据类型        字节流             字节输入流   读取数据    InputStream            字节输出流   写出数据    OutputStream        字符流            字符输入流  读取数据 Reader            字符输出流  写出数据 Writer
  • 案例:将创建一个文件,并向其中赋值,然后将这个文件中的内容复制给另一个文件
    字符流
// 创建一个文本文件,并给里面赋值File file = new File("F://a.txt");// 向文件中写入数据// 创建字符输出流对象FileWriter fileWriter = new FileWriter(file);fileWriter.write("hello\r\n");fileWriter.write("world\r\n");fileWriter.write("123");// 关流fileWriter.close();// 读取源文件// 创建字符输入流对象FileReader fileReader = new FileReader(file);// 创建目标文件File file2 = new File("F://b.txt");// 读取数据// 创建字符数组char[] ch = new char[1024];// 创建长度int leng = -1;// 创建循环读取数据while ((leng = fileReader.read(ch)) != -1) {    // 创建字符输出流对象    FileWriter fileWriter2 = new FileWriter(file2);    // 将读取到的数据输出    fileWriter2.write(ch, 0, leng);    // 关流    fileWriter2.close();}// 关流fileReader.close();

字节流

// 创建字节输出流对象File file = new File("F://a.txt");FileOutputStream fileOutputStream = new FileOutputStream(file);// 创建字符数组char[] b = {
'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};for (char c : b) { // 将char中的数据写入文件中 fileOutputStream.write(c);}// 关流fileOutputStream.close();// 创建字节输入流对象FileInputStream fileInputStream = new FileInputStream(file);// 创建字节输出流对象File file2 = new File("F://b.txt");FileOutputStream fileOutputStream2 = new FileOutputStream(file2);// 读取文件byte[] ch = new byte[1024];int len = -1;while((len = fileInputStream.read(ch)) != -1) { fileOutputStream2.write(ch, 0, len);}// 关流fileOutputStream2.close();fileInputStream.close();

复制图片

字节流可以操作所有类型的文件视频、图片都能使用,因为所有的文件在计算机中都是以字节形式存储

而字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件

实现代码与上述案例中字节流案例相同

标准输入流 & 转换流 & 打印流

标准输入输出流

是System下的类字段(被静态修饰的成员变量),都是字节流

public static final InputStream in; // 标准输入流public static final PrintStream out; // 标准输出流

标准输入流,用来读取由键盘输入的数据

标准输出流,用来将数据以字节流的方式输出到控制台上

转换流

  • OutputStreamWriter:将字节输出流转换为字符输出流
    new OutputStreamWriter(new FileOutputStream(new File(“”)));
  • InputStreamReader:将字节输入流转换为字符输入流
    new InputStreamReader(new FileInputStream(new File(“”)));

打印流

任意数据类型的数据打印到控制台上

字节打印流:PrintStream
字符打印流:PrintWriter

println(String str); // 打印完自动换行print(String str); // 打印完不自动换行

自动换行 使用方法println()实现自动换行

自动刷新 创建PrintWriter对象时启动自动刷新开关,并且使用println等3个方法可以实现自动刷新
注意:创建FileWriter对象时boolean参数是是否追加,而创建打印流对象的boolean类型参数是是否自动刷新

对象操作流

概述

用于从流中读取对象的

ObjectInputStream 称为 反序列化流,利用输入流从文件中读取对象
ObjectOutputStream 称为 序列化流,利用输出流向文件中写入对象
特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。
当一个类的对象需要IO流进行读写的时候,这个类就必须实现序列化接口(Serializable)

Properties集合

Properties介绍

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

特点:
1、Hashtable的子类,map集合中的方法都可以用。
2、该集合没有泛型。键值都是字符串。
3、它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。
4、有和流技术相结合的方法。
这里写图片描述
其中comments就是,显示在输出文件的第一行,一般用来描述文件中内容的,这个内容可以根据自己需求随便写

你可能感兴趣的文章
Spring中BeanFactory和FactoryBean有什么区别?
查看>>
牛年(2021)的KPI
查看>>
快速识别图片类型
查看>>
理解云原生
查看>>
docker常见问题答疑
查看>>
mac最简配置maven
查看>>
虚拟机性能监控与故障处理工具
查看>>
GIT的一些操作
查看>>
ZooKeeper 四字命令
查看>>
Mysql InnoDB锁问题
查看>>
ZooKeeper编程 基础教程
查看>>
Java 集合框架
查看>>
kafka 操作
查看>>
Java 集合框架 算法
查看>>
Java 集合框架 Set实现
查看>>
Java 集合框架 List实现
查看>>
Java 集合框架 Map 实现
查看>>
kafka 简单入门
查看>>
maven常用命令汇总
查看>>
Redis 方案
查看>>