1.IO流
1.1概述
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
I : input 输入
O : output 输出
1.2分类
按处理数据类型的不同,分为字节流和字符流
按数据流向的不同,分为输入流和输出流。(入和出是相对于内存来讲的)
按功能不同,分为节点流和处理流
节点流:直接操作数据源
处理流:对其他流进行处理
1.3四大抽象
1.3.1InputStream
1.3.2OutputStream
1.3.3Reader
1.3.4Writer
1.4文件流
1.4.1FileInputStream
1.4.1.1概述
用来打开文件并读取文件中的数据
想要读取一个文件,就必须要找到它
1 绝对位置
以系统根目录为准,比如D:/xxx\xxx\xx\a.txt
2 相对位置
./ 表示当前目录
…/ 表示上级目录
…/…/ 上上级目录
1.4.1.2常用方法
1.4.1.3Read使用
read:读取一个字节,并返回对应的ASCII码值,返回为int类型,如果到达文件末尾(读完了) 则返回-1
package IO;
import java.io.FileInputStream;
import java.io.IOException;
/*
* /**
* 字节输入流,按照字节的方式进行数据读取
*
*/
public class IO_01_FileInputStream_01 {
public static void main(String[]args){
//创建字节输入流
//传入文件路径,用于打开该文件获取数据
//绝对路径
//FileInput fis = new FileInputStream("D:\\a.txt");
//ecplise中,./定位当前项目,并不是当前文件夹
//相对路径
try{
FileInputStream fis = new FileInputStream("./src/b.txt");
//read:读取一个字节,并返回对应的ASCII码值,返回int类型,如果到达文件末尾(读完了)则返回-1
//int data = fis.read();
int data = 0;
while ((data= fis.read())!=-1){
System.out.println((char)data);
}
//data = fis.read();
//while (data! =-1){
//System.out.println((char)data);
//}
//关闭资源
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
1.4.1.4Read重载使用
/**
- read方法重载 : 可以传递一个数组,一次读取会把该数组读满/读完,然后一次性返回
- 返回int类型,为当前读取的个数,如果达到文件末尾 返回-1
- 数组就相当于是一个缓冲区,效率会有所提升
*/
package IO;
import java.io.FileInputStream;
/**
* read方法重载 : 可以传递一个数组,一次读取会把该数组读满/读完,然后一次性返回
*
* 返回int类型,为当前读取的个数,如果达到文件末尾 返回-1
*
* 数组就相当于是一个缓冲区,效率会有所提升
*/
public class IO_04_FileInputStream_04 {
public static void main(String[]args){
try(FileInputStream fis = new FileInputStream("./src/b.txt")){
//available:可读取的字节数
System.out.println(fis.available());
// 数组容量并不是越大效率就越高,容量和数据大小刚好一致的时候,效率最高
byte []bytes = new byte[fis.available()];
int temp = 0;
while((temp = fis.read(bytes))!=-1){
//把字节数组转换为字符串,可能出现数据重复问题
//System.out.print(new String(bytes));
//因为read返回的是当前次读取的元素个数,所以我们可以指定读多少,转换多少
//数组,起始位置(包含),个数
System.out.println(new String(bytes,0,temp));
}
}catch (Exception e){
e.printStackTrace();
}
}
}
1.4.2FileReader
1.4.2.1概述
1.4.2.2 使用方式
1.4.3 FileOutputStream
1.4.3.1 概述
1.4.3.2 常用方法
1.4.3.3 构造方法
1.4.3.4 使用方式
1.4.4 FileWriter
1.5 缓冲流
【特点】
主要是为了提高效率而存在的,减少物理读取次数
提供readLine()、newLine()这样的便捷的方法(针对缓冲字符流)
在读取和写入时,会有缓存部分,调用flush为刷新缓存,将内存数据写入到磁盘
1.5.1 BufferedReader
1.5.2 BufferedWriter
1.6 转换流
1.7 打印流
1.7.1 概述
1.7.2 使用方式
package IO;
import java.io.FileOutputStream;
import java.io.PrintStream;
/**
* 打印流 就是输出流
*
*/
public class IO_13_PrintStream {
public static void main(String[] args) throws Exception{
// 创建输出流
FileOutputStream fos = new FileOutputStream("D:/a.txt");
// 封装为打印流
PrintStream ps= new PrintStream(fos);
ps.println(123);
ps.println("asdasd阿萨德");
// System中的打印流 默认打印到控制台
System.out.println("xxxx");
// 更改System中的打印流
System.setOut(ps);
// 以下所有打印操作,不再显示在控制台中,而是打印到指定文件中
System.out.println("xxxxxxxxx");
System.out.println("你好吗");
}
}
1.8 数据流
1.8.1 概述
1.8.2 使用