IO流(Input读 Output写)
1、java中IO流的四大首领
java.io.InputStream 字节输入流 流分为:输出流 输入流
java.io.OutputStream 字节输出流 字节流 字符流
字节流是万能的,字符流自能读取普通文本
java.io.Reader 字符输入流 带Stream结尾的都是字节流,带Reader,
java.io.Writer 字符输出流 Writer都是字符流
1.1注意
所有的流都实现了Closerable接口,都有close()方法,流毕竟是一个管道,用完一定要记得关闭。
所有的输出流都有一个falsh()方法,用来将管道中剩余未输出的数据强行输出完毕,清空管道并关闭管道,要有一个好习惯,用完输出用完flash一下,不然会丢失数据
需要掌握的流(16个)重点掌握前两个和最后两个
1文件专属流(4个)
1.1 java.io.FileInputStream 文件字节输入流,任何类型的文件都可以用这个流来读,
FileInputStream里面的 int read()方法读到的是对应的字节,所以返回的是 int, 可以自己强行转换成Sting
一定要先会搭架子,里面的异常直接try catch
//创建文件字节输入流对象
FileInputStream file = null;
try {
//创建文件字节输入流对象,传入文件的路径的位置
file = new FileInputStream("D:\\untitled\\read");
//开始读
//调用read读的方法,开始read的指正指向空,调用的话,是先移动,再读值
int readDate = file.read();//这个方法的返回值是读取到的字节本生
System.out.println(readDate);
readDate = file.read();
System.out.println(readDate);
//当read()读到文件的末尾,在读的时候,读取不到任何数据,返回-1
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//在finally语句中确保流一定关闭,关闭前提,流不是空的
if(file!= null){
try {
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//读一般采用while循环的方式 改进循环 以后都这么写
int readDate1 = 0;
while((readDate1= file.read())!= -1)
System.out.println(readDate1);
这种方式效率比较低,一次读一个字节
1.2 学习int read(byte[ ] b )
一次最多读取b.length个字节,提高效率
往byte [ ] 数组中去读
FileInputStream file = null;
try {
//相对路径会怎样? 相对路径一定是从当前位置开始找
//这里的默认当前路径是工程的根,project的根,找到project文件夹,放在里面 必须放到工程文件夹下,不然会报错找不到
//如果放到到项目文件夹中,那么文件名必须写具体。从project文件为起点往下找
file = new FileInputStream("tempfile");
//开始读,采用byte数组,一次最多读取byte.length个字节
byte[] bytes = new byte[4];
//返回值是读到的字节的数量(不是字节本身)
int readCount = file.read(bytes);
//调用方法将字节数组全部转换为字符串
//不应该全部都转换,而是读了多少个字符转多少个
String s = new String(bytes,0,readCount);
System.out.println(s);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(file != null) {
try {
file.close();
} catch (IOException e) {
e.printStackTrace();
}
}
优化上面的代码,获得最终版,这个才是需要掌握的,要背会
public static void main