字节输入流
字节的读入学习分为几个步骤:
- 首先是从一个字节一个字节读入开始学习,每读取一次打印一次,再读取,在打印的方式实现数据的读取;
- 然后是利用while循环实现判断读取的最后一位是否为-1从而得知是否读取完成,实现第一次的改进;
- 然后将读取文件的语句同样和判断一起写入while循环中实现代码的优化;
package Object;
/*
* OutputStream(抽象类) 字节输出流的父类
* InputStream(抽象类) 字节输入流的父类
*
* fileInputStream 文件字节输入流
* 输入流所指向的路径或者文件不存在则会报错
*
* 输出流所指向的文件如果不存在,则会自动创建
* 输出流所指向的文件路径不存在的,也会报错
*
*
*/
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class IOstream {
//暂时不适用于汉字
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("qq.txt");
// 循环第一次改进
/*
* int ch = fis.read();
* while(ch!=-1){
* System.out.print((char)ch);//先打印然后在读
* ch = fis.read();
* }
*/
// 循环最终改进 判断一次完成
int ch = 0;
while ((ch = fis.read()) != -1) {//读到文件末尾后所读的到的是-1,所以用-1来判断是否已经读取完毕
System.out.print((char)ch);
}
}
public static void main1(String[] args) throws IOException {
// 首先需要在该项目下建立一个qq.txt文件
// 构造方法可以传入file对象或者直接路径
FileInputStream fis = new FileInputStream("qq.txt");
// 一次读一个字节
int ch1 = fis.read();
System.out.println((char) ch1);
// 第二次读取
int ch2 = fis.read();
System.out.println((char) ch2);
// 第三次读取
int ch3 = fis.read();
System.out.println((char) ch3);
// 第四次读取
int ch4 = fis.read();
System.out.println((char) ch4);
// 第五次读取
int ch5 = fis.read();
System.out.println((char) ch5);
// 第六次读取
int ch6 = fis.read();
System.out.println((char) ch6);
// 读到文件末尾是则读到的是-1
// 第七次读取
int ch7 = fis.read();
System.out.println(ch7);
// 第八次读取
int ch8 = fis.read();
System.out.println(ch8);
fis.close();
}
public static void main2(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("demo.java");
byte[] bs = new byte[1000];
//一次读取一个字节数组,返回值是读取到的字节总数
//fis.read(bs);
/* 第一种打印方式:利用循环
* for(int i:bs){
*
* if(i!=0){
* System.out.print((char)i);
* }
* }
*/
//第二种利用匿名类对象
//System.out.println(new String(bs) );
//第三种
int total = fis.read(bs);
System.out.println(new String(bs,0,total));
fis.close();
}
}