JDK提供的流继承了四大类:InputStream(字节输入流)、OutputStream(字节输出流)、Reader(字符输入流)、Writer(字符输出流)。
字符流和字节流的主要区别:
1.字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。
2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。
只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。
详解如下:
一、字节流讲解
1.用流对文件进行处理
package com.chen.test;
import Java.io.*;
/**
*
* @author 陈家小帅
*
*/
public class TestIO {
public static void main(String[] args) {
File file = new File("E:/java.txt");
if (!file.exists()) { //先判断该目录文件是否存在
try {
//file.mkdirs(); 创建该目录下指定的文件夹
file.createNewFile(); // 当文件不存在时,创建此文件夹
} catch (Exception e) {
e.printStackTrace();
}
}
//file.delete(); //删除指定的文件
System.out.println("文件名:"+file.getName());
}
}
2. InputStream 和 OutputStream 是两个 abstact 类,对于字节为导向的 stream 都扩展这两个基类;
inputStream中的关键方法:
read():方法是读取一个byte字节,但是返回的是int。
read(byte[]):一次性读取内容到缓冲字节数组
read(byte[],int,int):从数据流中的哪个位置offset开始读长度为len的内容到缓冲字节数组
OutputStream中的关键方法
write(int):写入一个字节到stream中
write(byte[])写入一个byte数组到stream中
write(byte[],int,int):把byte数组中从开始处写入长度为len的数据
flush():这个方法是用来刷新stream中的数据,让缓冲区中的数据强制的输出
3.FileInputStream和FileOutputStream
FileInputStream : 从文件系统中的某个文件中获得输入字节.
FileOutputStream : 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流.
下面是一个例子:
package com.chen.test;
import java.io.*;
/**
*
* @author 陈家小帅
*
*/
public class Test4 {
public static void main(String[] args) throws Exception {
String path1 = "E:/WorkSpace/Mouth/bin/Dest.txt";
String path2 = "E:/WorkSpace/Mouth/bin/D.txt";
ReadByFIS(path1, path2);
}
/**
* 使用FileInputStream 将一个文件的内容写入到另一个文件中,并在控制台输出
*
* @param path1
* @param path2
* @throws Exception
*/
public static void ReadByFIS(String path1, String path2) throws Exception {
InputStream in = new FileInputStream(path1); //创建文件输入流
OutputStream out = new FileOutputStream(path2); //创建文件输出流
byte[] buffer = new byte[1024]; //定义字节数组
int len = 0;
while ((len = in.read(buffer)) > 0) { //将最多buffer.lenth个字节的数据读入byte数组中
String s = new String(buffer, 0, len); //将读入的字节转换成String类型
System.out.println(s); //输出读取到的信息
out.write(buffer, 0, len); //将读取到的信息写入到文件中
}
out.close(); //关闭输入输出流
in.close();
}
}
输出结果如下:
如果想让某个字符串写入到文件中,如下所示:
package com.chen.Two;
import java.io.*;
public class Two {
// 编写一个Java程序将111,112,113,114,115 这5个数以写入到Dest.txt文件中
public static void main(String[] args) throws Exception {
String str = "111,112,113,114,115"; //定义字符串
FileOutputStream fo = new FileOutputStream("E:/WorkSpace/Mouth/bin/Dest.txt"); //创建文件输出流
int len = 0 ;
byte[] buffer = str.getBytes(); //将字符串转换成byte字节
fo.write(buffer); //将字节数组中的数据写出
fo.close();
}
}