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

2023-11-10


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

}








本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:利用I/O流读取文件内容 的相关文章

随机推荐

  • 前端学习:表格学习,附练习+源码

    文章目录 一 表格的主要作用 二 表格属性 三 总结 四 合并单元格方式 一 表格的主要作用 1 表格主要用于显示 展示数据 因为它可以让数据显示的非常的规整 可读性非常好 特别是后台展示数据的时候 能够熟练运用表格就显得很重要 一个清爽简
  • 微信公众号群发接口和原创校验

    一 说明 1 1限制 二 群发图文消息 三 群发图片 文本 四 群发时使用is to all 五 上传图文消息接口 5 1 上传图文消息内的图片获取URL 订阅号与服务号认证后均可用 5 2 上传图文消息素材 订阅号与服务号认证后均可用 六
  • C语言变长数组讲解

    C语言变长数组讲解 参考资料 1 https www cnblogs com Anker p 3744127 html 2 https www cnblogs com veis p 7073076 html 3 https blog csd
  • EXCEL解析导入,多线程批量插入大量数据

    EXCEL解析导入 批量插入大量数据 excel导入基本分为3个步骤 1 上传文件 2 解析文件 3 逻辑内容 首先查看是哪一步需要优化 一般需要在第3步 插入数据库的逻辑优化 如果数据量比较大的话 单条sql执行很慢 几条数据几次和数据库
  • Alibaba Java Code Guidelines

    Alibaba Java Code Guidelines这个代码规范插件 对于Java代码规范 业界有统一的标准 不少公司对此都有一定的要求 但是即便如此 庞大的Java使用者由于经验很水平的限制 未必有规范编码的意识 而且即便经验丰富的老
  • 提取python字符串括号中的内容

    一些数据按字符串保存 如str1 1 0 123 2 0 234 当我们需要将字符串中的数据提取出来进行计算时 涉及只提出括号中的内容 此时可采取用Python re正则表达式模块和split 函数完成 操作过程略复杂 有更简洁方法时再更新
  • 每日一题(C语言基础篇)3

    题目描述 求一个整数中2进制为1的个数 例如 8 00001000 有一个二进制为1的数 9999 270F 有8个2进制为1的数 代码实现 include
  • 树莓派4B串口配置

    树莓派环境 硬件 树莓派4B 系统 ubuntu22 04 串口信息 树莓派4B一共有6个串口 之前的版本只有2个串口 这6个串口中 有5个时硬件串口 还有个mini串口 这5个硬件串口在我们需要使用外设时 但是 默认情况下 5个默认串口只
  • Qt与VS的对比(1)

    对话框篇 QT与VS创建对话框的方式非常相似 都需要创建一个对话框类 在需要显示该对话框的地方包含对应的头文件 显示即可 区别 QT显示模态对话框使用函数QDialog exec VS显示模态对话框使用函数CDialog DoModal Q
  • JDK的下载与安装详细解释

    JDK的下载与安装 一 JDK下载 进入Oracle官网 https www oracle com index html 打开后我们通过选项卡找到Downloads 操作如下界面 接下来我们找到Deverloper Downloads中的J
  • Unity3D之简单的点击拾取

    新建一个Cube物体和一个脚本Cube 将Cube脚本挂到Cube物体上 代码如下 csharp view plain copy using UnityEngine using System Collections public class
  • Web Components 系列(八)—— 自定义组件的样式设置

    前言 通过前面的学习 对自定义组件的相关概念和知识点也有了一定了解 今天我们就来学习一下给自定义元素及其子元素设置样式的几种方法 直接给自定义标签添加样式 index html
  • 多module启动报错Could not resolve dependencies for project

    前几天用若依的前后端分离版本 项目能启动 打包发布时异常 提示找不到项目依赖 无法解析artifact Could not resolve dependencies for project The following artifacts c
  • [管理与领导-82]:IT基层管理者 - 核心技能 - 高效执行力 - 7- 高效执行的结果通过高效的过程保证

    目录 前言 一 执行前 对 1 1 确保做对事 do right thing 1 目标 行动的目标 2 方向 行动的方向 3 需求 行动是为了满足某种需求 4 指令 行到受谁的指令 1 2 确定做对事的方法 1 2 1 确认 do righ
  • 理解DOM事件流的三个阶段

    本文主要解决两个问题 什么是事件流 DOM事件流的三个阶段 起因 在学习前端的大半年来 对DOM事件了解甚少 一般也只是用用onclick来绑定个点击事件 在寒假深入学习JavaScript时 愈发觉得自己对DOM事件了解不够 遂打开我的
  • 全网最全的IDEA热部署方案,看完弄懂,再也不用加班

    概念 热部署就是正在运行状态的应用 修改了它的源码之后 在不重新启动的情况下能够自动把增量内容编译并部署到服务器上 使得修改立即生效 热部署为了解决的问题有两个 1 在开发的时候 修改代码后不需要重启应用就能看到效果 大大提升开发效率 2
  • python的http服务

    在一个局域网中因为要传输文件给朋友 所以建一个简单的http服务器 自己主机作为服务器 让朋友下载文件 自己主机安装pyhton 到要共享的文件夹下 开启HTTP服务 python m http server 9999 其他主机浏览器访问
  • Java实现算法“两数之和”

    最近开始刷LeetCode 为了加深印象 一定要写下来 题目 给定一个整数数组nums和一个目标值target 请你在该数组中找出和为目标值的那两个整数 并返回它们的数组下标 可以假设每种输入只会对应一个答案 但是不能重复利用这个数组中同样
  • Spring设计模式,事务管理和代理模式的应用

    扩充 贝叶斯定理答案见底 设计模式对关于面向对象问题的具体解决方案 1 单例多例 在设计单例模式时 要注意两个点 1 构造方法要私有 2 成员变量要私有 3 创建对象所用的方法要被synchronized修饰 因为方法体中会涉及到判断当前成
  • Java:利用I/O流读取文件内容

    要利用I O流读取文件内容 首先要掌握InputStream的体系结构 这个体系中FileInputStream和BufferedInputStream是一定要掌握的 因为使用的频率比较高 InputStream的方法 InputStrea