I/O流学习--InputStream下的常用方法

本文介绍一些读取文件的常用方法,代码如下:

skip方法:从输入流中跳过参数n指定数目的字节:

package com.jredu.InputStream;
/**
 * skip的使用
 */

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Tch5 {
		public static void main(String[] args) {
			try {
				FileInputStream fis=new FileInputStream("此处为要读取的文件的相对路径");
				try {
					byte[] b=new byte[fis.available()];
					//跳过n个字节后再开始读取
					fis.skip(5);
					fis.read(b);
					System.out.println(new String(b));
					fis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
}

mar()方法:标记输入流的当前位置,以便可使用reset()方法复位到该标记的位置

reset()方法:将当前位置复位为上次调用mar()方法方法标记的位置


package com.jredu.InputStream;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * mar的使用
 * @author Hello
 *
 */
public class Tch6 {
	public static void main(String[] args) {
		//读取过程中暂停
		//给当前位置做一个标记
		//下一次从标记位置读取
		try {
			//缓冲流:BufferedInputStream带有缓冲,相比FileInputStream读取更快
			BufferedInputStream bis=new BufferedInputStream(new FileInputStream("此处为要读取文件的相对路径"));
			byte[] b=new byte[bis.available()]; 
			//设置断点
			bis.mark(bis.read(b,0,b.length/2));
			System.out.println(new String(b));
			System.out.println("暂停读取...");
			//设置休眠两秒
			Thread.sleep(2000);
			System.out.println("继续读取...");
			//reset将当前复位的位置设置成上次调用mark标记的位置
			bis.reset();
			bis.read(b);
			System.out.println(new String(b));
			bis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

序列流的使用

package com.jredu.InputStream;
/**
 * 序列流(集合流):把n个流合并在一起读取
 */

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.SequenceInputStream;

import sun.net.www.content.audio.basic;

public class Tch7 {
	public static void main(String[] args) {
		try {
			//第一个文件流
			FileInputStream fis1=new FileInputStream("此处为要读取文件的相对路径");
			//第二个文件流
			FileInputStream fis2=new FileInputStream("此处为要读取文件的相对路径");
			//合并到序列流中,此方法只能合并两个文件
			SequenceInputStream sis=new SequenceInputStream(fis1, fis2);
			//临时存放数据的数组
			byte[] b=new byte[fis1.available()+fis2.available()];
			//一次性读取所有内容
			while(sis.read(b)!=-1){
				System.out.println(new String(b));
			}
			sis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


上面的序列流只能合并两个文件,如果要合并多个文件,可以用下面的方法

package com.jredu.InputStream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.SequenceInputStream;
import java.util.Vector;

public class Tch8 {
	public static void main(String[] args) {
		try {
			//三个文件流
			FileInputStream is = new FileInputStream("此处为要读取文件的相对路径");
			FileInputStream is2 = new FileInputStream("此处为要读取文件的相对路径");
			FileInputStream is3 = new FileInputStream("此处为要读取文件的相对路径");
			Vector<FileInputStream>vector=new Vector<>();
			//把三个流添加到集合中
			vector.add(is);
			vector.add(is2);
			vector.add(is3);
			//合并在一个序列流中
			SequenceInputStream sis=new SequenceInputStream(vector.elements());
			byte[]  n=new byte[is.available()+is2.available()+is3.available()];
			int off=0;
			for(int i=0;i<vector.size();i++){
				//off是数组当中存放数据的起始下标位置
				off+=sis.read(n,off,vector.get(i).available());
			}
			System.out.println(new String(n));
			sis.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值