Java使用I/O流读取文件内容的方法详解

本文实例讲述了Java使用I/O流读取文件内容的方法。分享给大家供大家参考,具体如下:

要利用I/O流读取文件内容,首先要掌握InputStream的体系结构。

这个体系中FileInputStream和BufferedInputStream是一定要掌握的,因为使用的频率比较高。

InputStream的方法:InputStream位于java.io包下

OutputStream的方法:

读取文件(代码):

package com.jredu.oopch11;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

/**

* I/O流的概念:数据流向某个对象的数据序列,并且到达这个对象的过程。

* 输入流:数据源数据流向计算机内存的过程

* 输出流:把数据从程序流向目标数据源的过程

* @author Administrator

*

*/

public class Ch01 {

/**

* 读取文件内容

* @param args

*/

public static void main(String[] args) {

//InputStream:是一个抽象类

// \:是一个 转移符

//表示磁盘路径的两种表示方式:1、\\ 2、/

try {

//从文件地址中读取内容到程序中

//1、建立连接

InputStream is = new FileInputStream("E:/iodemo/ch01.txt");

//2、开始读取信息

/*

//方法1:一次只读一个

System.out.println(is.read());//读取的是字节型的:49

System.out.println((byte)is.read());//50

*/

//方法2:定义数组,循环读取

//先定义一个字节数组存放数据

byte[] b = new byte[5];//把所有的数据读取到这个字节当中

//声明一个int存储每次读取到的数据

int i = 0;

//定义一个记录索引的变量

int index = 0;

//循环读取每个数据

while((i=is.read())!=-1){//把读取的数据放到i中

b[index]=(byte) i;

index++;

}

//把字节数组转成字符串

System.out.println(new String(b));

//关闭流

is.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

//系统强制解决的问题:文件没有找到

e.printStackTrace();

} catch (IOException e) {

//文件读写异常

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

package com.jredu.oopch11;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.util.Arrays;

/**

* I/O流的概念:数据流向某个对象的数据序列,并且到达这个对象的过程。

* 输入流:数据源数据流向计算机内存的过程

* 输出流:把数据从程序流向目标数据源的过程

* @author Administrator

*

*/

public class Ch02 {

/**

* 读取文件内容

* @param args

*/

public static void main(String[] args) {

//InputStream:是一个抽象类

// \:是一个 转移符

//表示磁盘路径的两种表示方式:1、\\ 2、/

try {

//从文件地址中读取内容到程序中

//1、建立连接

InputStream is = new FileInputStream("E:/iodemo/ch01.txt");

//2、开始读取信息

//先定义一个字节数组存放数据

byte[] b = new byte[5];//把所有的数据读取到这个字节当中

//完整的读取一个文件

is.read(b);

//read:返回的是读取的文件大小

//最大不超过b.length,返回实际读取的字节个数

System.out.println(Arrays.toString(b));//读取的是字节数组

//把字节数组转成字符串

System.out.println(new String(b));

//关闭流

is.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

//系统强制解决的问题:文件没有找到

e.printStackTrace();

} catch (IOException e) {

//文件读写异常

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

package com.jredu.oopch11;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.util.Arrays;

/**

* I/O流的概念:数据流向某个对象的数据序列,并且到达这个对象的过程。

* 输入流:数据源数据流向计算机内存的过程

* 输出流:把数据从程序流向目标数据源的过程

* @author Administrator

*

*/

public class Ch03 {

/**

* 读取文件内容

* @param args

*/

public static void main(String[] args) {

//InputStream:是一个抽象类

// \:是一个 转移符

//表示磁盘路径的两种表示方式:1、\\ 2、/

try {

//从文件地址中读取内容到程序中

//1、建立连接

InputStream is = new FileInputStream("E:/iodemo/ch01.txt");

//2、开始读取信息

//先定义一个字节数组存放数据

byte[] b = new byte[is.available()];//把所有的数据读取到这个字节当中

//is.available():返回文件的大小

// while(is.available()==0);//不等于0时才停止循环

//完整的读取一个文件

int off = 0;

int le = 2;

while(is.read(b, off, 2)!=-1){

off+=1;

}

is.read(b,off,2);

//read:返回的是读取的文件大小

//最大不超过b.length,返回实际读取的字节个数

System.out.println(Arrays.toString(b));//读取的是字节数组

//把字节数组转成字符串

System.out.println(new String(b));

//关闭流

is.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

//系统强制解决的问题:文件没有找到

e.printStackTrace();

} catch (IOException e) {

//文件读写异常

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

package com.jredu.oopch11;

import java.io.BufferedInputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.Arrays;

public class Ch04 {

/**

* 读取中文字符的文件

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

/*FileInputStream fis = new FileInputStream("E:/iodemo/ch04.txt");

//包装流

BufferedInputStream bis = new BufferedInputStream(fis);*/

//包装流

BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:/iodemo/ch04.txt"));

//读取文件内容

byte[] b = new byte[bis.available()];

bis.read(b);

/*char[] c = new char[b.length];

for (int i = 0; i < c.length; i++) {

c[i]=(char) b[i];

}

System.out.println(Arrays.toString(c));//乱码

*/

System.out.println(Arrays.toString(b));//得到的是字节

//String(byte[])把字节数组转成字符串

System.out.println(new String(b));//可以得到中文

bis.close();//关闭流(关闭bis就可以了)

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

package com.jredu.oopch11;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class Ch05 {

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

//读取文件

FileInputStream fis = new FileInputStream("E:/iodemo/ch01.txt");

//fis.available():文件的长度

byte[] b=new byte[fis.available()];

//skip:跳过n个字节后再开始读取

fis.skip(5);//跳过前5个

fis.read(b);

System.out.println(new String(b));

fis.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

package com.jredu.oopch11;

import java.io.BufferedInputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

public class Ch06 {

/**

* 读取过程暂停,给当前做一个标记,下一次从标记位置开始读取

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//读取过程中暂停

//给当前做一个标记

//下一次从标记位置开始读取

try {

BufferedInputStream bis= new BufferedInputStream(new FileInputStream("E:/iodemo/ch06.txt"));

byte[] b = new byte[bis.available()];

// bis.read(b, 0, b.length/2);

//设置断点

bis.mark(bis.read(b, 0, b.length/2));//位置就是读取的长度

System.out.println(new String(b));

System.out.println("暂停读取....");

Thread.sleep(2000);//休眠2s

//休眠后继续读

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.oopch11;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.SequenceInputStream;

/**

* 序列流(集合流)

* 把n个流合并在一起读取

* @author Administrator

*

*/

public class Ch07 {

public static void main(String[] args) {

try {

//第一个文件流

FileInputStream fis1=new FileInputStream("E:/iodemo/ch01.txt");

//第二个文件流

FileInputStream fis2=new FileInputStream("E:/iodemo/ch04.txt");

//合并到序列流中

SequenceInputStream sis=new SequenceInputStream(fis1, fis2);

//方式1

// //临时存放数据的数组

// int len =fis1.available()+fis2.available();

// byte[] b=new byte[2*len+1];

// //把每一次读取到的临时数据存放如sb中

//// StringBuffer sb=new StringBuffer();

// //一次性读取所有的内容

// int off=0;

// int i=0;

// while((i=sis.read(b,off,len))!=-1) {

//// sb.append();

// off+=i;

// }

// System.out.println(new String(b));

//方式2

byte[] b=new byte[fis1.available()];

// StringBuffer sb=new StringBuffer();

// int i=0;

while(sis.read(b)!=-1) {

System.out.println(new String(b));

// sb.append(new String(b));

}

// System.out.println(sb.toString());

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.oopch11;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.SequenceInputStream;

import java.util.Vector;

public class Ch08 {

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

//三个文件流

FileInputStream fis1 = new FileInputStream("E:/iodemo/a.txt");

FileInputStream fis2 = new FileInputStream("E:/iodemo/b.txt");

FileInputStream fis3 = new FileInputStream("E:/iodemo/c.txt");

//把三个流添加到集合中

Vector<FileInputStream> vector = new Vector<>();

vector.add(fis1);

vector.add(fis2);

vector.add(fis3);

// vector.elements(); //方法返回的是Enumeration

//合并到一个序列流中

SequenceInputStream sis = new SequenceInputStream(vector.elements());

byte[] b = new byte[fis1.available()+fis2.available()+fis3.available()];

//读取

int off=0;

//vector.get(i).available():一个文件的长度

for (int i = 0; i < vector.size(); i++) {

//off:数组当中存放数据的起始下标的位置

off+=sis.read(b, off, vector.get(i).available());//每次读取一个文件的长度

}

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();

}

}

}

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

以上是 Java使用I/O流读取文件内容的方法详解 的全部内容, 来源链接: utcz.com/z/312309.html

回到顶部