本文介绍一些读取文件的常用方法,代码如下:
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();
}
}
}