JAVA io流
一、IO流原理及其相关概念
- I/O是Input/Output的缩写,IO技术用于处理设备之间的数据传输,在java程序中对于数据的输入/输出操作以“流(stream)”的方式进行
- java.io包下提供了分钟“流”类和接口,用于获取不同种类的数据,并通过标准的方法输入或输出数据(输入和输出是相对(内存)的概念,我们站位在程序/内存的角度)
二、IO流的分类
- 按操作数据单位不同分为:字节流(8bit)、字符流(16bit)
- 非文本数据一般使用字节流,文本数据使用字符流(一个字符char类型占2字节)
- 按数据流的流向不同分为:输入流、输出流
- 按流的角色不同分为:节点流、处理流(通俗的讲:我们要洗澡,我们要将一个池子的水放到浴缸里面,我们可以直接在两者之间建一根水管,让水流进去,这就是字节流,如果我们要加快水流的速度,对水管进行一系列的改造,这个就是处理流6)
抽象基类 | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream(字节输入 流) | Reader(字符输入流) |
输出流 | OutputStream(字节输出流) | Writer(字节输出流) |
- 抽象类不能实例化,不一定有抽象方法
- JAVA中IO流涉及的类非常多,但其多而规则,所有的类都是从以上的4个抽象基类派生的
- 由这4个抽象基类派生的子类名称都是以其父类作为子类的后缀名
抽象基类 | 文件流(节点流) | 缓冲流(处理流的一种) |
---|---|---|
InputStream | FileInputStream | BufferedInputStream |
OutputStream | FileOutputStream | BufferedOutputStream |
Writer | FileWriter | BufferedWriter |
Reader | FileReader | BufferedReader |
- JVM有多种垃圾回收算法,但是对于物理连接比如:数据库连接、输入输出流、Socket连接无能为力,需要手动关闭。
package priv.stream.java;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderWriterTest {
public static void main(String[] args) throws IOException {
// 1.实例化File类的对象,指明要操作的文件
File file = new File("E:\\原D盘文件\\code\\java\\基础语法\\src\\priv\\stream\\java\\hello.txt");
System.out.println(file.getAbsoluteFile());
//2.提供具体的流
FileReader fr = new FileReader(file);
//3.数据的读入
int data = fr.read();
while (data != -1)
{
System.out.print((char)data);
data = fr.read();
}
//3.数据的读入(简化)
int data;
while(( data = fr.read() )!=-1)
{
System.out.print((char)data);
}
fr.close();
}
}
上面的异常是通过抛出来解决,下面是通过try-catch-finally来解决(快捷键Alt+Ctrl+T)
package priv.stream.java;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileReaderWriterTest {
public static void main(String[] args) {
FileReader fr = null;
try {
File file = new File("E:\\原D盘文件\\code\\java\\基础语法\\src\\priv\\stream\\java\\hello.txt");
System.out.println(file.getAbsoluteFile());
fr = new FileReader(file);
int data ;
while ((data = fr.read())!=-1)
{
System.out.print((char)data);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
}
try {
if(fr!=null)
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
说明:读入的文件一定要存在,否则就会报FileNotFoundException