IO流概述
字节流适合读取一切内容,字符流适合读音视频文件
文件字节输入流
package com.byte_stream;
import java.io.*;
public class FileInputStreamDemo {
public static void main(String[] args) throws IOException {
//1.创建一个文件字节输入流管道与源文件接通
//InputStream is = new FileInputStream(new File("file-io-app\\src\\data.txt")); //多态
//简化写法
InputStream is = new FileInputStream("file-io-app\\src\\data.txt");
//2.int 4个字节用int接受 读取一个字节返回(每次读取一滴水)
// int b1 = is.read();
// System.out.println((char)b1);
//
// int b2 = is.read();
// System.out.println((char)b2);
//
// int b3 = is.read();
// System.out.println((char)b3);
//
// int b4 = is.read(); //读取完毕返回-1
// System.out.println(b4);
//3.使用循环改进
//定义一个变量记录每次读取的字节
//但读取中文就会遇到问题,无法避免,无法用这个流读中文
int b ;
while ((b=is.read())!=-1){
System.out.print((char)b);
}
}
}
package com.byte_stream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
/**
* 目标:使用文件字节输入流,每次读取一个字节数组的数据
*/
public class FileInputStreamDemo02 {
public static void main(String[] args) throws Exception {
//1.创建一个文件字节输入流管道,与源文件接通
InputStream is = new FileInputStream("file-io-app\\src\\data.txt");
//2.定义一个字节数组,用于读取字节数组
// byte[] buffer = new byte[3]; //3b
// int len = is.read(buffer);
// System.out.println("读取了" + len + "字节");
// String rs = new String(buffer); //将buffer以默认编码解码
// System.out.println(rs);
//
// int len1 = is.read(buffer);
// System.out.println("读取了" + len1 + "字节");
// String rs1 = new String(buffer); //将buffer以默认编码解码
// System.out.println(rs1);
//
//
// int len2 = is.read(buffer); //读取完毕返回-1
// System.out.println("读取了" + len2 + "字节");
//
// //读取多少倒出多少
// String rs3 = new String(buffer,0,len2); //将buffer以默认编码解码
// System.out.println(rs3);
//3.改进用循环,每次读取一个字节数组
byte[] buffer = new byte[3]; //3b
int len; //记录每次读取的字节数
while((len=is.read(buffer))!=-1){
System.out.println(new String(buffer,0,len));
}
}
}
package com.byte_stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
/**
* 目标:使用文件字节输入流,一次读完文件的全部字节,可以解决乱码问题
*/
public class FileInputStreamDemo03 {
public static void main(String[] args) throws Exception {
File f = new File("file-io-app\\src\\data.txt");
InputStream is = new FileInputStream(f);
//2.定义一个字节数组与文件的大小刚刚好一样 JDK9有,readAllBytes方法达到相同效果
byte[] buffer = new byte[(int)f.length()];
int len = is.read(buffer);
System.out.println("读取了多少个字节"+len);
System.out.println("文件大小"+f);
System.out.println(new String(buffer));
}
}