Java:利用I/O流读取文件内容

Java:利用I/O流读取文件内容_第1张图片

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

Java:利用I/O流读取文件内容_第2张图片

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

InputStream的方法:InputStream位于java.io包下
Java:利用I/O流读取文件内容_第3张图片
OutputStream的方法:
Java:利用I/O流读取文件内容_第4张图片
读取文件(代码):
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)