Java_字节流-FileInputStream文件输入流纪要

70 篇文章 0 订阅
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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值