IO流:
对文件进行读取和写入 通过流的方式(类似河流)
将数据从某端-----》某端
Java将IO流进行系统的分类:
1.通过流的方向进行分类
输入流:读取操作
输出流:写入操作
2.通过流的类型进行分类
字节流:一次读取一个字节,或者写入一个字节
字符流:一次读取一个字符,或者写入一个字符
(1)一个字符 = 2个字节
(2)文件类型:txt,mp3,mp4,jpg
(3)字节流专门是用来处理非文本文件的
(4)字符流专门用来处理文本文件。
3.通过流的处理方式进行分类
节点流:效率不高
处理流:效率高
-----课程体系------按照流的类型进行扩展
今日内容:字节流
字节流的老祖宗
字节输入流——读取内容
Java类——InputStream
字节输出流——写入内容
Java类——OutputStream
通过字节流中的某个子类来对象昨天File类的进行一个操作
将内容写入文件内。
将文件内的容器读取到Java程序中
针对文件开辟的2个字节流(输入流 输出)
文件字节输入流
Java类: FileInputStream
文件字节输出流
Java类: FileOutputStream
通过FileInputStream和FileOutputStream对文件进行读取和写入的基本流程
1.通过File类构建一个文件
2.将file对象传递到流的构造函数中
3.通过流对象调用读取或者写入的方法即可
4.关闭所有流的资源
文件输出流 (写入)
package com.zking.test;
import java.io.File;
import java.io.FileOutputStream;
/*
* 文件输出流 FileOutputStream
*/
public class StreamDemo_02 {
public static void main(String[] args) throws Exception {
//写入内容到文件
//1.构建File对象
File file = new File("D:\\ty.txt");
/**
* FileOutputStream输出流会自动创建文件
*/
//2.将file对象放入流对象中----输出流FileOutputStream
FileOutputStream fos = new FileOutputStream(file);
//3.提供写入的数据
//a
// char sb = 'a';
//通过fos对象写入数据
// fos.write(sb);
//一次写入一个字节数组
String str = "我是你哥";
fos.write(str.getBytes());
System.out.println("写入成功");
//4.关闭资源
fos.close();
//问题:会覆盖//解决方案:先读后写
}
}
文件输入流 (读取)
package com.zking.test;
import java.io.File;
import java.io.FileInputStream;
public class StreamDemo {
public static void main(String[] args) throws Exception{
/**
* 字节流
* FileInputStream
* FileOutputStream
*/
//通过IO流的方式将D:\\xwj.txt中的内容读取出来打印输出在控制台上进行显示
//1.通过File对象绑定一个路径
File file = new File("D:\\xwj.txt");
//2.读取--FileInputStream
//将file对象传递到输入流的构造函数中即可 构造----异常
FileInputStream fis = new FileInputStream(file);
//3.通过流对象调用读取的方法将内容读取到
// int n = fis.read();//没有参数,一次读取一个字节
// System.out.println((char)n);//a
// //可以再次读取吗? 可以——不需要指定下一个,自动下一个(指针-C)
// int n2 = fis.read();
// System.out.println((char)n2);//b
// int n3 = fis.read();
// System.out.println(n3);//-1
//通过循环操作进行简化
/*
while(true) {//因为内容不确定 死循环
//读取一个字节
int n = fis.read();
//先判断后打印
if(n == -1) {
System.out.println("读完了...没了");
break;
}
System.out.print((char)n);
}
*/
//最简化的
// int len = 0;//将来读取一个字节后将内容保存到该变量中
// while((len = fis.read())!=-1) {//读取一个后,后面会自动指向下一个
// System.out.print((char)len);
// }
/**
* 字节数组-----》字符串
* new String(byte[] bytes)
*
* getBytes();
*/
//读取一个字节数组
byte[] buf = new byte[1024];
int len = 0;
while((len = fis.read(buf))!=-1) {
//通过字符串的构造函数 每次从第一个开始,读取到len长度(下标)
System.out.println(new String(buf,0,len));
}
//4.关闭所有流的资源
fis.close();
}
}
缓冲输入流 BufferedInputStream
缓冲输出流 BufferedOutputStream
package com.zking.test;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* 文件流的升级(节点流)----缓冲流(处理流)
*
* 文件缓冲流
* 缓冲输入流 BufferedInputStream
* 缓冲输出流 BufferedOutputStream
*
*
* 缓冲流读和写 效果高 仅此而已
*
* 1.File构建
* 2.传入文件流对象
* 3.将文件流对象传入缓冲流即可---为了提高效率而已
* 4.读或写
* 5.关闭
*
*
*/
public class BufferedDemo {
public static void main(String[] args) throws Exception{
//根据System类获取当前时间的毫秒值
System.out.println(System.currentTimeMillis());
//读取
File file = new File("D:\\xwj.txt");
FileInputStream fis = new FileInputStream(file);
//将fis转换成缓冲流效果变高
BufferedInputStream bis = new BufferedInputStream(fis);
//读取
int len = 0;
while((len = bis.read())!=-1) {
System.out.print((char)len);
}
bis.close();
fis.close();
System.out.println();
System.out.println(System.currentTimeMillis());
//写入
// File file = new File("D:\\dyk.txt");
// FileOutputStream fos = new FileOutputStream(file);
// //缓冲
// BufferedOutputStream bos = new BufferedOutputStream(fos);
// //写入
// bos.write("天天好心情".getBytes());
// //关闭(流的顺序---从下往上)
// bos.close();
// fos.close();
}
}