流的概念

  • 数据流向某个对象的数据序列,并且到达这个对象的过程。

  • 输入流:数据源数据向计算机内存的过程。

  • 输出流:把数据从程序流向目标数据源的过程。

  • 字节流:以字节为数据单位来处理的流。

  • 字符流:以字符为数据单位来处理的流。

流的父类 :

输入流:InputStream(字节输入流)和Reader(字符输入流)为基类

输出流:OutputStream(字节输出流)和Writer(字符输出流)为基类


读取文件

读取文件1

//磁盘路径两种表示方式:
// 1: \\ 2: /
try {
//从文件地址中读取内容到程序中
InputStream is = new FileInputStream("D:/IOFile/Ch02.txt");
//开始读取信息
//先定义一个字节数组存放数据
byte[] b = new byte[5];
//声明一个int存储每次读取到的数据
int i=0;
//定义一个 记录索引的变量
int index = 0;
//循环读取每个数据
while((i=is.read())!=-1){
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();
}
}

读取文件2

//磁盘路径两种表示方式:
// 1: \\ 2: /
try {
//从文件地址中读取内容到程序中
InputStream is = new FileInputStream("D:/IOFile/Ch02.txt");
//开始读取信息
//先定义一个字节数组存放数据
byte[] b = new byte[5];
//完整的读取一个文件
is.read(b);
//read返回读取的文件大小
//最大不超过b.length,实际读取以文件大小为准
//打印的字节
System.out.println(Arrays.toString(b));
//如何把字节数组转成字符串
System.out.println(new String(b));
// while(is.read(b)!=-1){
//
// }
//关闭流
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
//文件没有找到异常
e.printStackTrace();
} catch (IOException e) {
//文件读写异常
// TODO Auto-generated catch block
e.printStackTrace();
}
}

读取文件3

public static void main(String[] args){
//磁盘路径两种表示方式:
// 1: \\ 2: /
try {
//从文件地址中读取内容到程序中
InputStream is = new FileInputStream("D:/IOFile/Ch02.txt");
//开始读取信息
//先定义一个字节数组存放数据
byte[] b = new byte[8];
//完整的读取一个文件
int off=0;
byte [] c=new byte[is.available()]; //返回文件的大小
while(is.read(b,off,2)!=-1){
off+=2;
// System.out.println(off);
}
// is.read(b,0,2);
// is.read(b,off,len);
//read返回读取的文件大小
//最大不超过b.length,实际读取以文件大小为准
//打印的字节
System.out.println(Arrays.toString(b));
//如何把字节数组转成字符串
System.out.println(new String(b));
// while(is.read(b)!=-1){
//
// } //关闭流
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
//文件没有找到异常
e.printStackTrace();
} catch (IOException e) {
//文件读写异常
// TODO Auto-generated catch block
e.printStackTrace();
}
}

读取文件4

public static void main(String[] args) {

        try {
FileInputStream fis = new FileInputStream("D:/IOFile/Ch05.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
//读取文件内容
byte [] b= new byte[bis.available()];
bis.read(b);
System.out.println(new String(b));
// String(byte[])把字节数组转成字符串 // 错误:不要尝试
// 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)); //乱码,一个字节表示不了汉字 } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

skip:跳过n个字节后再开始读取

//读取文件
FileInputStream file = new FileInputStream("D:/IOFile/Ch02.txt");
byte[] b = new byte[file.available()];
//skip:跳过n个字节后再开始读取
file.skip(2);
file.read(b);
System.out.println(new String(b));
file.close();

读取过程中暂停,给当前位置做一个标记,下一次从标记位置开始读取

try {
//FileInputStream 必须要传一个文件名
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("D:/IOfile/ch07.txt"));
byte[] b=new byte[bis.available()];
//设置断点
bis.mark(bis.read(b,0,b.length/2));
System.out.println(new String(b));
System.out.println("暂停读取...");
Thread.sleep(2000);
System.out.println("继续读取...");
//reset将当前复位的位置设置成上次调用mark标记的位置
bis.reset();
bis.read(b,b.length/2,b.length/2);
System.out.println(new String(b));
// bis.reset();
// bis.read(b);
// System.out.println(new String(b));
bis.close();
}

序列流(集合流)

把n个流合并在一起读取。

try {
//第一个文件流
FileInputStream fis1=new FileInputStream("D:/IoFile/ch02.txt");
//第二个文件流
FileInputStream fis2=new FileInputStream("D:/IoFile/ch03.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();
}

把三个流添加到集合中,合并在一个序列流中

try {
//三个文件流
FileInputStream fis1 = new FileInputStream("D:/IoFile/Ch09.txt");
FileInputStream fis2 = new FileInputStream("D:/IoFile/Ch0901.txt");
FileInputStream fis3 = new FileInputStream("D:/IoFile/Ch0902.txt");
//把三个流添加到集合中
Vector<FileInputStream> vector= new Vector<>();
vector.add(fis1);
vector.add(fis2);
vector.add(fis3); // vector.elements();
//合并在一个序列流中
SequenceInputStream sis = new SequenceInputStream(vector.elements());
byte[] b = new byte[fis1.available()+fis2.available()+fis3.available()];
int off=0;
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(); }

Java——I/O入门相关练习代码的更多相关文章

  1. Java Socket通信读取相关信息代码

    转自:http://developer.51cto.com/art/201003/190206.htm Java Socket通信读取有不少需要我们注意的知识点.当我们在使用的时候有很多的问题摆在我们 ...

  2. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  3. 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程

    http://jijiaa12345.iteye.com/blog/1739754 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程 本文是一篇在Myeclipse下构建Jav ...

  4. Java入门-浅析Java学习从入门到精通【转】

    一. JDK (Java Development Kit)  JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库 ...

  5. Java对象序列化入门

      Java对象序列化入门 关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结.此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制 ...

  6. Java Web快速入门——全十讲

    Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...

  7. 【JAVA零基础入门系列】Day5 Java中的运算符

    运算符,顾名思义就是用于运算的符号,比如最简单的+-*/,这些运算符可以用来进行数学运算,举个最简单的栗子: 已知长方形的长为3cm,高为4cm,求长方形的面积. 好,我们先新建一个项目,命名为Rec ...

  8. 【JAVA零基础入门系列】Day6 Java字符串

    字符串,是我们最常用的类型,每个用双引号来表示的串都是一个字符串.Java中的字符串是一个预定义的类,跟C++ 一样叫String,而不是Char数组.至于什么叫做类,暂时不做过多介绍,在之后的篇章中 ...

  9. 大白话说Java反射:入门、使用、原理

    文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java反射:入门.进阶.原理> 反射之中包含了一个「反」字,所以想要解释反射就必须先从「正」开始解释. 一般情况下,我们使用某个类时 ...

随机推荐

  1. HTTP高级(Cookie,Session ,LocalStorage )

    Cookie 服务器通过 Set-Cookie 头给客户端一串字符串 客户端每次访问相同域名的网页时,必须带上这段字符串 客户端要在一段时间内保存这个Cookie Cookie 默认在用户关闭页面后就 ...

  2. RocketMQ踩坑记

    一.前言 现在的主流消息队列基本都是kafka.RabbitMQ和RocketMQ,只有了解各自的优缺点才能在不同的场景选择合适的MQ,对比图如下: MQ对比图 本篇文章主要介绍我自己在跑官方demo ...

  3. Maven的安装跟配置(最全)

    一.去官网下载maven 官网地址: https://maven.apache.org/ 点击下载apache-maven-3.6.3-bin.zip 下载完成后解压即可. 二.配置环境变量 在我们的 ...

  4. 第十五章节 BJROBOT cartographer 算法构建地图【ROS全开源阿克曼转向智能网联无人驾驶车】

    建地图前说明:请确保你的小车已经校正好 IMU.角速度.线速度,虚拟机配置好 ROS 网络的前提进行,否则会造成构建地图无边界.虚拟机端无法正常收到小车主控端发布的话题数据等异常情况!! 1.把小车平 ...

  5. (转) 增加 header 参数,spring boot + swagger2(springfox)

    1 @Configuration 2 @EnableSwagger2 3 public class Swagger2 { 4 @Bean 5 public Docket createRestApi() ...

  6. 2.2.2 Sqoop2 基本架构

    主要组件 1.Sqoop Client 定义了用户使用Sqoop的方式,包括客户端命令行CLI和浏览器两种方式,浏览器允许用户直接通过Http方式完成Sqoop的管理和数据的导出 2.Sqoop Se ...

  7. 实验一-最小生成树Kruskal算法

    实验名称 最小生成树算法-Kruskal算法 实验目的 1.掌握并查集的合并优化和查询优化: 2.掌握Kruskal算法. 3.能够针对实际问题,能够正确选择贪心策略. 4.能够针对选择的贪心策略,证 ...

  8. Docker安装MySQL,Redis,阿里云镜像加速

    Docker安装 虚拟化容器技术.Docker基于镜像,可以秒级启动各种容器.每一种容器都是一个完整的环境,容器之间相互隔离. 如果之前安装的有其他版本,卸载旧的版本. $ sudo yum remo ...

  9. 关于软件架构中的b/s

    **B/S架构 b/s只需要一个浏览器,用户就可以通过不同的网址访问不同的服务器程序. 优点:开发,安装,部署,维护简单 缺点:对硬件要求过高,用户的体验会受到影响 首先是资源分类:**可以分为静态资 ...

  10. 十八:SQL注入之堆叠及绕WAF

    堆叠查询注入 (双查询注入) stacked injections(堆叠注入)从名词的含义就可以看到是一堆的SQL语句一起执行,而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一 ...