现在的位置: 首页 > 编程语言 > 正文

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

2020年02月13日 编程语言 ⁄ 共 8047字 ⁄ 字号 评论关闭

本文实例讲述了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流读取文件内容的方法详解

以上就上有关Java使用I/O流读取文件内容的方法详解的相关介绍,要了解更多Java,I/O流,读取文件内容请登录学步园。

抱歉!评论已关闭.