package net.csdn.InputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
/**
* Created by rabbit先生 on 2017/3/11 0011.
*/
public class FileInputStreamDemo {
/**
* 前面已经说过了File类,其主要作用就是对文件进行操作,
* 例如读取文件,确定文件的名字,修改时间等问题,但都是基于文件级别的操作
*
* 今天,我们来将对文件内容的读取操作,在java中对文件进行操作使用的是IO流
* IO流:就是指InputStream(输入流)和OutputStream(输出流)
* 特别说明:
* 输入流就是把文件中的东西进行输入到内存中,
* 输出流就是把内存中的东西输出到文件中,
* 我们可以使用内存来做分别,输入到内存就是输入流,从内存中输出就是输出流
*
* 我们使用最基础的类:FileInputStream
* 使用文件路径:F:\fileInputStream\a.txt
* a.txt文件中的内容是:abcdefghijklmn
* 最后:流就像是水龙头一样,有开有关,所以使用交流之后记得对流进行关闭操作,
* 不然会浪费内存,导致你的电脑开发的时候越来越卡
*/
//创建FileInputStream对象,使用FileInputStream(File file)
//创建这个对象的时候需要传递一个File类,所以我们先创建File类,使用File(String pathname)
//我们传递一个本地文件的绝对路径就可以了
public static void main(String[] args) throws Exception {
//创建File类对象
File file = new File("F:\\fileInputStream\\a.txt");
//创建FileInputStream对象,并关联对应的文件,创建对象的时候会出现异常
FileInputStream fis = new FileInputStream(file);
//我们现在可以通过FileInputStream对象对文件的内容进行读取了
/*************第一种方式开始代码{一次读取一个}****************/
//使用的时候请关闭方式二的代码
// int len;
//循环一个一个读取{当读取不到的时候会返回-1所以可以使用这个做循环的条件}
//可能有人觉得奇怪,我文件里面的内容是字母,为什么可以使用int类型接收呢?
//答案:读取的时候获取到的是ASCII碼{可以System.out.println(len);不转换输出试一下},
// 所以我们需要转换
// while ((len = fis.read()) != -1) {
// System.out.println((char)len);
// }
// fis.close();//关闭流
/*************第一种方式结束代码****************/
/*************第二种方式开始代码{一次读取多个放到字节数组中}****************/
//这种方式效率更加高,因为不用频繁的操作硬盘,一次就读了1M
//byte[] bytes = new byte[1024];//为了读取方便,一次读取1M,
//将读取到的数据保存到bytes这个字节数组中
int length;
byte[] bytes = new byte[1024];
while ((length = fis.read(bytes)) != -1) {
System.out.print(new String(bytes, 0, length));//将数据变为字符串输出
}
fis.close();//关闭流
//int read = fis.read(bytes);//返回读取到的长度{也是字节数组中的长度}
/*************第二种方式结束代码****************/
}
}