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

来源:互联网 发布:点读包音频切割软件 编辑:程序博客网 时间:2024/05/16 18:11

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

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 blocke.printStackTrace();}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}


原创粉丝点击