字节流
字节流:InputStream、OutputStream
字符流:Reader、Writer
本质区别:字节流是原生的操作,而字符流是经过处理后的操作。
基本操作流程:
1. 根据文件路径创建File类对象 ;
2. 根据字节流或字符流的子类实例化父类对象 ;
3. 进行数据的读取或写入操作
4. 关闭流(close())。
字节输出流:(outputStream 抽象类)
实现两大接口:Closeable,Flushable两个接口
具体方法:
字节数组内容全部输出:output.write (byte b[]);;
将部分字节数组内容输出:output.write(byte b[],int off,int len)
输出单个字节:output.write(int b);
抽象类父类想要实例化对象,必须需要子类,如果进行文件操作,特别是需要文件叠加或覆盖时:
1. 接收File类(覆盖):public FileOutputStream(File file) throws FileNotFoundException
2. 接收File类(追加):public FileOutputStream(File file, boolean append)
遵循四步走:file对象,流的实例化、数据的读写、关闭流
File file = new File(File.separator + "Users" + File.separator + "yuisama" + File.separator + "Desktop" + File.separator + "hello.txt");
if (!file.getParentFile().exists())
{ // 必须保证父目录存在 ,创建多级父目录
file.getParentFile().mkdirs() ;
}
// OutputStream是一个抽象类,所以需要通过子类进行实例化,此时只能操作File类
OutputStream output = new FileOutputStream(file) ;
// 要求输出到文件的内容
String msg = "Java公开课" ;
// 将内容变为字节数组
output.write(msg.getBytes());
// 关闭输出
output.close();
AutoCloseable接口支持自动关闭(一般不使用)
字节输入流:(InputStream )
实现了Closeable接口;
具体方法:
读取数据到字节数组中,返回数据的读取个数:in.read(byte b[]);
(数据个数(字节数组大于数据)、字节数组大小(字节数组小于)、-1(没有数据还在读取))
读取部分数据到字节数组中,每次只读取传递数组的部分内容:in.read(byte[],int off,int len )
(读取满了就返回长度len ,没有取满返回数据个数,没有数据-1)——汤勺与汤
读取单个字节,每次读取一个字节的内容,直到没有数据了返回-1:in.read();
// 1.定义文件路径
File file = new File(File.separator + "Users" + File.separator + "ma" + File.separator + "Desktop"+ File.separator + "hello.txt");
// 2.必须保证文件存在才能进行处理
if (file.exists()) {
InputStream input = new FileInputStream(file) ;
byte[] data = new byte[1024] ;
// 每次可以读取的大数量
int len = input.read(data) ;
// 此时的数据读取到了数组之中
String result = new String(data,0,len) ;
// 将字节数组转为String
System.out.println("读取内容【"+result+"】") ;
//关闭
input.close();
}