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

}








  • 26
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,下面是代码实现: ```java import java.io.*; public class FileDemo { public static void main(String[] args) { // 从标准输入读取数据 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("请输入一个整数:"); int num1 = Integer.parseInt(br.readLine()); System.out.print("请输入一个浮点数:"); float num2 = Float.parseFloat(br.readLine()); System.out.print("请输入一个字符串:"); String str = br.readLine(); // 创建一个File对象,表示要写入的文件 File file = new File("test.txt"); // 创建一个PrintWriter对象,用于写入数据到文件中 PrintWriter pw = new PrintWriter(file); // 向文件中写入数据 pw.println(num1); pw.println(num2); pw.println(str); // 关闭输出 pw.close(); // 创建一个BufferedReader对象,用于从文件读取数据 BufferedReader br2 = new BufferedReader(new FileReader(file)); // 从文件读取数据 int num1FromFile = Integer.parseInt(br2.readLine()); float num2FromFile = Float.parseFloat(br2.readLine()); String strFromFile = br2.readLine(); // 输出读取到的数据 System.out.println("从文件读取到的整数是:" + num1FromFile); System.out.println("从文件读取到的浮点数是:" + num2FromFile); System.out.println("从文件读取到的字符串是:" + strFromFile); // 关闭输入 br2.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上代码通过BufferedReader从标准输入读取数据,使用PrintWriter将数据写入到文件中,再通过BufferedReader从文件读取数据并在控制台输出。在此过程中,我们使用了Java中的File类、二进制类和标准输入输出,希望可以帮助你理解它们的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值