java进阶8——IO流

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.txt
File(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,否则返回false
boolean mkdir(); // 当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false  
boolean mkdirs(); // 当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
boolean 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就是,显示在输出文件的第一行,一般用来描述文件中内容的,这个内容可以根据自己需求随便写

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值