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

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

e9e831760d7c62c119308a21e05845e6.png

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

1acca713ba7f68db21dbc1dcc2cb4feb.png

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

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

807cacbc37753feff4d3fe794b7bb128.png

OutputStream的方法:

3268d0f39c8c3b6048580b1da04692d1.png

读取文件(代码):

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 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程序设计有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值