[java]使用数据流读取本地txt文件内容

在实现这个功能之前,先要了解一下数据流的基础概念,基本字节数据流类和数据流中提供的主要数据操作方法

1 数据流的基本概念

几乎所有的程序都离不开信息的输入和输出,比如从键盘读取数据、从文件中获取或者向文件存入数据、在显示器上显示数据。这些情况下都会涉及有关输入/输出的处理。在Java中,把这些不同类型的输入、输出源抽象为流(Stream),其中输入或输出的数据称为数据流(DataStream)。用统一的接口来表示。
  数据流是指一组有顺序的、有起点和终点的字节集合。程序从键盘接收数据或向文件中写数据,都可以使用数据流来完成。流被组织成不同的层次。
  比如说中文在编码表中默认占2个字节。而为了按照文字的单位来处理,所以出现了字符流。
  字节流:一次读入或读出是8位二进制。
  字符流:一次读入或读出是16位二进制。
  数据流分为输入数据流和输出数据流。输入数据流只能读不能写,而输出数据流只能写不能读。从数据流中读取数据时,必须有一个数据源与该数据流相连。

2 基本字节数据流类

文件数据流
  InputStream和OutputStream两个类都是抽象类。抽象类是不能进行实例化的,因此,在实际应用中经常用到的并不是这两个类,而是一系列基本数据流类。它们都是InputStream和OutputStream的子类,在实现其父类方法的同时又都定义了其特有的功能。
  文件数据流包括FilelnputStream和FileOutputStream,这两个类用来进行文件的I/O处理,其数据源或数据终点都应当是文件。

3 数据流中提供的主要数据操作方法

输入数据流中提供的主要数据操作方法如下。
  •int read( ):从输入流中读取一个字节的二进制数据。
  •int read(byte[ ]b):将多个字节读到数组中,填满整个数组。
  •int read(byte[ ]b,int off,int len):从输入流中读取长度为len的数据,从数组b中下标为off的位置开始放置读入的数据,读毕返回读取的字节数。
  这3个方法提供了访问数据流中数据的方法,所读取的数据都默认为字节类型。第一个read( )方法将读取的一个字节作为低位,形成一个0~255的int类型的数值返回。它是一个抽象方法,需要在子类中具体实现。
  以上3个方法中,当输入流读取结束时,会得到-1,以标志数据流的结束。在实际应用中,为提高效率,读取数据时经常以系统允许的最大数据块长度为单位读取。也就是说要与一个后面即将讨论的BufferedlnputStream相连。
  •void close( ):关闭数据流。当结束对一个数据流的操作时应该将其关闭,同时释放与该数据流相关的资源,因为Java提供系统级的垃圾自动回收功能,所以当一个流对象不再使用时,系统可以自动关闭。但是,为提高程序的安全性和可读性,建议显式关闭输入/输出流。
  •int available( ):返回目前可以从数据流中读取的字节数(但实际的读操作所读得的字节数可能大于该返回值)。
  •long skip(long l):跳过数据流中指定数量的字节不读取,返回值表示实际跳过的字节数。
  对数据流中字节的读取通常是按从头到尾顺序进行的,如果需要以反方向读取,则需要使用回推(Push Back)操作。在支持回推操作的数据流中经常用到如下几个方法。
  •boolean markSupported( ):用于测试数据流是否支持回推操作,当一个数据流支持mark( )和reset( )方法时返回true,否则返回false。
  •void mark(intmarkarea):用于标记数据流的当前位置,并划出一个缓冲区,其大小至少为指定参数的大小。
  •void reset( ):将输入流重新定位到对此流最后调用mark方法时的位置。
  输出数据流是指只能写不能读的流,用于从计算机中输出数据。与输入流类似,java.io包中所有输出数据流大多是从抽象类OutputStream继承而来的,并且实现了其中的所有方法,这些方法主要提供了关于数据输出方面的支持。输出数据流中提供的主要数据操作方法如下。
  •void write(int i):将字节i写入到数据流中,它只输出所读入参数的最低8位。该方法是抽象方法,需要在其输出流子类中加以实现,然后才能使用。
  •void write(byte b[ ]):将数组b[ ]中的全部b.length个字节写入数据流。
  •void write(byte b[ ],int off,int len):将数组b[ ]中从下标off开始的len个字节写入数据流。元素b[off]是此操作写入的第一个字节,b[0ff+len-1]是此操作写入的最后一个字节。以上这些方法用于向输出数据流中写数据。在实际应用中,和操作输入数据流一样,通常以系统允许的最大数据块长度为单位进行写操作。
  •void close( ):当结束对输出数据流的操作时应该将其关闭。
  •void flush( ):刷新此输出流并强制写出所有缓冲的输出字节。

4 代码实现

再了解完以上概念,实现这个功能就非常简单,直接使用FileInputStream读取文件,然后在新建一个字节数组存放数据即可,具体代码如下

public class MainRun {
	public static String PathName="G:\\JavaData\\1.txt";
   public static void main(String args[])
   {
	   
	   ReadTxt1();
   }
   public static Boolean ReadTxt1()
 {
	   try {
			InputStream is=new FileInputStream(PathName);
			byte[]b=new byte[is.available()];

			is.read(b);
		System.out.println(Arrays.toString(b));
		System.out.println(new String(b));
			is.close();
			return true;
		} catch (FileNotFoundException e) {
		// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			return false;
	}
  }

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值