2020.5.24 课堂笔记
IO流
-
用来处理设备之间的数据传输。
-
分为:输入流和输出流
-
字节流:可以操作任意类型的文件(图片,音频等等)
字符流:只能操作文本文件。
FileOutPutStream
-
创建一个文件输出流,来关联一个文件,当关联的文件不存在,就会创建文件。
-
往文件中写入数据:
-
write(int b):一次写入一个字节,如果超过字节范围,就会丢弃掉部分数据。
-
write(byte [] a):一次写入一个字节数组
-
write((byte [] a,int start,int length):一次写入字节数组的一部分
-
怎么覆盖原文件,或者在源文件后面添加?在使用输出流构造方法时,
FileOutputStream out = new FileOutputStream(“c.txt”,true);true在文件后面添加,否则覆盖。
-
package org.westos.demo0524.IO;
/*Author:LH
CreatTime:2020.05.26.19:39*/
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test2 {
public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream("b.txt");
// 每次将输出的数据添加到文档的尾部
FileOutputStream out = new FileOutputStream("c.txt",true);
byte[] bytes = new byte[1024 * 8];
in.read(bytes);
out.write(bytes);
// 要将换行符变成字节输入
String s2="\r\n";
byte[] bytes2 = s2.getBytes();
in.read(bytes2);
out.write(bytes2);
String s="你是谁呀";
byte[] bytes1 = s.getBytes();
in.read(bytes1);
out.write(bytes1);
in.read(bytes2);
out.write(bytes2);
in.close();
out.close();
}
}
- 流使用完毕,要释放资源。close()方法。
- 释放资源的原因:通知系统释放管理的文件资源。让IO流对象变成垃圾等待回收器回收
- 写入过程中:换行“\r\n”.注意将换行符变成字节数据
流的异常处理
- 异常不建议抛出去,而要自己处理,通过try …catch捕捉处理。
- 在异常处理中可以做一写逻辑,不仅是打印异常信息。
FileInputStream
-
概念:从文件中读取数据。如果读取不到有效的字节就会返回-1
-
输入流关联的文件不存在,就会报错。
-
构造方法和方法
-
构造方法:
FileInputStream(File file):创建一个输入流,传入一个File file。
FileInputStream(String name):创建一个输入流,传入一个String name。
-
方法:
close():关闭文件输入流并释放资源
read():文件的读入,从此输入流中读取一个数据字节。
read(byte[] b):从此输入流中将最多
b.length
个字节的数据读入一个 byte 数组中。read(byte[] b, int off, int len):从此输入流中将最多
len
个字节的数据读入一个 byte 数组中,其实位置从off开始。
-
-
流使用完毕,要释放资源。close()方法。
- 注意:释放资源的位置和释放资源时的空指针异常
文件的复制
模板复制代码:
package org.westos.demo0524.IO;
import java.io.*;
/*Author:LH
CreatTime:2020.05.26.16:48*/
//复制文件
//步骤一:创建字节输入,输出流,输入输出流中封装要复制的文件的路径和名称
//步骤二:封装完,采用一次读取一个字节数组,这样会比较快。
//步骤三:创建字节数组,建议一次读取和写入8KB
//步骤四:将文件读入字节数组
//步骤五:将字节数组的字节,写入到文件中
//注意:建议自己捕捉和处理错误,输入输出对象关闭时,要判断是否为空
public class Test {
public static void main(String[] args) {
File file = new File("b.txt");
File file1 = new File("c.txt");
FileInputStream in = null;
byte[] bytes = new byte[1024 * 8];
try {
in = new <