一、基本内容
如果要进行文件内容的操作那么必须依靠数据流完成,而数据流分为两种:
字节流:InputStream(字节输入流)、OutputStream(字节输出流);
字符流:Reader(字符输入流)、Writer(字符输出流);
字节流理解配图
字符流理解配图
字节流与字符流操作的本质区别只有一个:字节流是原生的操作,而字符流是经过处理后的操作。
在进行网络数据传输、磁盘数据保存所保存所支持的数据类型只有:字节。
而所有磁盘中的数据必须先读取到内存后才能进行操作,而内存中会帮助我们把字节变为字符。字符更加适合处理中文。
不管使用的是字节流还是字符流,其基本的操作流程几乎是一样的,以文件操作为例。 创建File类对象 ,主要是指明要操作的文件路径;
1.根据字节流或字符流的子类实例化父类对象 ;
2.进行数据的读取或写入操作;
3.关闭流(close());
4.对于IO操作属于资源处理,所有的资源处理操作(IO操作、数据库操作、网络)最后必须要进行关闭。
二、字节输出流:(OutputStream)(重点)
字节输出流主要以操作byte数据为主,观察java.io.OutputStream类的定义结构:
字节输出流主要以操作byte数据为主,观察java.io.OutputStream类的定义结构:
public abstract class OutputStream implements Closeable, Flushable
OutputStream类实现了Closeable,Flushable两个接口,这两个接口中的方法:
1. Closeable: public void close() throws IOException;
2. Flushable: public void flush() throws IOException;
OutputStream类定义有三个重要的输出操作方法:
将给定的字节数组内容全部输出:public void write(byte b[]) throws IOException
将部分字节数组内容输出:public void write(byte b[], int off, int len) throws IOException(重点)
输出单个字节:public abstract void write(int b) throws IOException
OutputStream是一个抽象类,按照抽象类的基本原则来讲,如果想要取得OutputStream类的实例化对象那么一定需要子类,如果要进行文件的操作,可以使用FileOutputStream类来处理,
这个类的构造方法如下:
接收File类(覆盖):public FileOutputStream(File file) throws FileNotFoundException
接收File类(追加):public FileOutputStream(File file, boolean append)
范例:实现文件的输出
package lisy; import java.awt.print.Printable; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.sql.Date; import java.text.SimpleDateFormat; public class Demo { public static void main(String[] args) throws IOException { //第一步:定义要输出的文件的File类对象 File file = new File("e:"+File.separator+"hello"+File.separator+"my.txt"); //输出信息的时候文件可以不存在,但是目录必须存在 if(!file.getParentFile().exists()) {//父路径不存在 file.getParentFile().mkdirs();//创建父路径 } //第二步:利用OutputStream的子类为父类进行实例化 OutputStream output = new FileOutputStream(file); //第三步:输出文字信息 String msg = "富则达济天下,穷则独善其身";//字符串 //为了方便输出需要将字符串变为字节数组 byte data[] = msg.getBytes();//变为字节数组 output.write(data);//输出数据 output.close();//关闭流 } }
输出文件的部分内容 (一个字符两个字节)
output.write(data,0,10);//输出部分数据
使用循环方式进行单个字节的信息输出
for(int x = 0;x < data.length; x++) { output.write(data[x]);//单个字节输出数据 }
我们可以发现,每次执行完成之后所有的内容都被覆盖了。所以也可以进行数据的追加操作
范例:追加数据
OutputStream output = new FileOutputStream(file,true);//此处为追加操作
如果想要进行换行操作,则可以使用“\r\n”表示。
//第三步:输出文字信息 String msg = "富则达济天下,穷则独善其身。。。\r\n";//字符串