package cn.file;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
/**
* 字节输入流;
*
* 今天抽空整理一篇关于Java文件输入流相关的小Demo;
*
* 还是和以往一样,先创建一个自己的测试类;
* @author Administrator
*/
public class FileTest {
/**
* Java主函数|入口;
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// path: 初始化一个地址;(\\标示\,用作转义)
String path = "D:\\2020\\a.txt";
/**
* String.getBatys()是String类提供的一个数组转化的方法;
* 作用:
* 用来将字符串数据转化为数组用;
*/
byte[] bs = path.getBytes();
/**
* 实例化一个指定地址的File对象file;
*/
File file = new File(path);
/**
* 实例化一个指定File对象的文件输入流对象;
* 和文件输出流的实现方式类似;也有两种对应的方式;
*/
FileInputStream fisA = new FileInputStream(file);
/**
* 实例化一个指定地址的文件输入流对象;
*/
FileInputStream fisB = new FileInputStream("D:\\2020\\b.txt");
/**
* 读取字符流对象的下一个字符;
* 第一次获取的时候取到的是第一个;
* 第二次获取的时候是第二个;
* 每次获取都会获取下一个;
*
* 如果流对象文件中的数据已经通过字符取完了;那通过read()取到的将会是-1;
*/
// int read = fisB.read();
// System.out.println(read+" - "+(char)read);
// read = fisB.read();
// System.out.println(read+" - "+(char)read);
// read = fisB.read();
// System.out.println(read+" - "+(char)read);
// read = fisB.read();
// System.out.println(read+" - "+(char)read);
// read = fisB.read();
// System.out.println(read+" - "+(char)read);
// read = fisB.read();
// System.out.println(read+" - "+(char)read);
// read = fisB.read();
// System.out.println(read+" - "+(char)read);
// read = fisB.read();
// System.out.println(read+" - "+(char)read);
// read = fisB.read();
// System.out.println(read+" - "+(char)read);
// 也可以通过循环来优化处理;
// int i = 0;
// while((i = fisB.read()) != -1){
// System.out.println((char)i);
// }
/**
* 封装字节数组进行数据读取;
* 同时初始化数组长度;
*/
byte [] bArr = new byte[2];
/**
* 在这里说明一下:
* 我在文件:"D:\\2020\\b.txt"中的内容是6622999;
* 通过下面这种方式直接循环字符数据的话如果是数据字符length存在基数,我定义的字节数组是偶数;
* 每次循环它都会自动补足后一位,也就是会重复后一位;
* 它打印出来是这样: 66-22-99-99;
* 而正确的理想状态应该是: 66-22-99-9;
*
* 为了解决这个问题,我们可以在装载字符数据进入字符数组时获取对应的下标;
* 通过String类的String(byte bytes[], int offset, int length);来解决这个问题;
* 它可以指定数组的其实下标,到结束下标位的字符获取;
*/
// while(fisB.read(bArr) != -1){
// System.out.println(new String(bArr));
// }
// 下标位记录变量;
int length = 0;
/**
* 解决奇偶数据异常的问题;
*/
while((length = fisB.read(bArr)) != -1){
/**
* String(byte bytes[], int offset, int length);
* 每次只读数组中有效的数据;
*/
System.out.println(new String(bArr,0,length));
}
/**
* 资源释放;
*/
fisA.close();
fisB.close();
}
}
文件输入流:
https://blog.csdn.net/dalei9243/article/details/106807749
Java字节流-文件输入/输出流的简单示例:
https://blog.csdn.net/dalei9243/article/details/106838152