• 文本我们能读懂的都可以认为是字符流,文章 java文件都是字符流数据

    • 流的分类 输入流 输出流

  • 1。输出流 Writer:关于字符流的父类,抽象类。与之相对的输入流 Reader类

  • 一、字符流

        • 字符流的命名规则:如果是输出流那么就以Writer结尾,如果是输入流就以Reader结尾

案例1:

使用字符流向一个文件输入Hello 沃得;

publicstaticvoid main(String[] args) {

File file =new File("test.txt");

System.out.println(file.length());

Writer writer = null;

try {

//I/O流是需要关闭的,如果不这样做就不能关闭资源

writer = new FileWriter(file);

writer.write("hellow");

} catch (IOException e) {

e.printStackTrace();

}finally {

//判断writer不是空 防止空指针异常

if(writer != null) {

try {

//writer.close的功能和flash一样都是清除缓存

writer.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

主要考虑异常的处理,writer的声明方法也需要仔细查看,根据写入的数据类型决定选择哪个方法来写入内容

文件的追加:

publicstaticvoid
main(String[] args)
{

Filefile
=new
File("test.txt");

System.out.println(file.length());

Writer
writer
= null;

try
{

//I/O流是需要关闭的,如果不这样做就不能关闭资源

//后面的布尔值如果为true则是在文件后面追加内容

writer
= new
FileWriter("text2.txt",true);

for(inti
= 0; i
< 100; i++)
{

writer.write("halloword");

个哈喽沃得就清除一下缓存

if(i
% 10 == 0) {

System.out.println("\n");

writer.flush();

}

}

}
catch
(IOException e)
{

e.printStackTrace();

}finally
{

//判断writer不是空
防止空指针异常

if(writer
!= null)
{

try
{

//writer.close的功能和flash一样都是清除缓存

writer.close();

}
catch
(IOException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}

}

}

}

字符输出流的换行:

  • 在写入的内容中的换行符\n前加上\r才能实现换行

try
{

//I/O流是需要关闭的,如果不这样做就不能关闭资源

//后面的布尔值如果为true则是在文件后面追加内容

writer
= new
FileWriter("text2.txt",true);

for(inti
= 0; i
< 100; i++)
{

writer.write("halloword\r\n");

个哈喽沃得就清除一下缓存

if(i
% 10 == 0) {

System.out.println("");

writer.flush();

}

}

}
catch
(IOException e)
{

e.printStackTrace();

}

writer的写入方法:

writer
= new
FileWriter("text3.txt",true);

char[]
c = {'a','b','c','d','e','f','g'};

writer.write(c,
2, 3);

  • 字符的输入流:

publicstaticvoid
main(String[] args)
{

File
file
=new
File("test.txt");

Readerreader
=null;

try
{

reader
= new
FileReader(file);

//单个字符的读取,读取的字符被转换为ASCII码

/*

* 通过char可以将获得的ASCII强转为char的字符型,

* read()方法在读取到最后的时候值会变成-1,所以可以用while

* 循环遍历文本中的内容,这种单个字符的读取性能不高。一般不用

*/

intc;

try
{

while((c
= reader.read())
!= -1) {

System.out.print((char)c+"\r\n");

}

}
catch
(IOException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}

}
catch
(FileNotFoundException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}finally
{

if(reader
!= null)
{

try
{

reader.close();

}
catch
(IOException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}

}

}

}

  • 字符输入流2:用数组读取内容

publicstaticvoid
main(String[] args)
{

File
file
=new
File("test.txt");

Reader
reader
= null;

try
{

reader
= new
FileReader(file);

//定义一个数组,这个方法是较为常用的方法

char[]
arr
= newchar[10];

//向字符数组填数据

try
{

intlen
= 0;

//intlen
= reader.read(arr);

//System.out.println("len的值"+len+"读取的内容"+Arrays.toString(arr));

输出结果为len的值10
读取的内容...(个元素)
如果数组中的元素不够10个,则长度变为文本内容长度,

* 元素有多长替换多长的,空出来的数组下标位置,还是为以前的元素值

* 知道最后完全没有元素了,读取长度变为-1

* while循环获得文本中的所有内容,由于最后一次读取,不一定能读取够

* 定义的数组长度,所以在将其转成字符串的使用用String(数组名,取值开始位置,取值结束位置)

* 将结束位置设置为从read()方法获得的长度。直到其返回为-1,while结束循环。

*/

while((len
= reader.read(arr))
!= -1) {

String
str
= new
String(arr,0,len);

System.out.print(str);

}

}
catch
(IOException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}

}
catch
(FileNotFoundException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}finally
{

try
{

reader.close();

}
catch
(IOException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}

}

}

  • 文件的拷贝

    publicstaticvoid
    main(String[] args)
    {

    * 1.通过输入流将文件读取到字符串中;

    File
    file
    =new
    File("D:\\Users\\Administrator\\eclipse-workspace\\7.13\\src\\ExtendOne.java");

    Reader
    reader
    = null;

    File
    file1
    = new
    File("javaCopy.java");

    Writer
    writer
    = null;

    try
    {

    intlen;

    //创建字符输入流的对象

    reader
    = new
    FileReader(file);

    try
    {

    //创建字符输出流的对象

    writer
    =new
    FileWriter(file1);

    }
    catch
    (IOException e1)
    {

    //
    TODO
    Auto-generated catch block

    e1.printStackTrace();

    }

    char[]
    arr
    = newchar[10];

    try
    {

    while((len
    = reader.read(arr))
    != -1){

    //把输入流读取到的数据写入字符输出流,输出流被写入玩后需要writer.flush()清除缓存;

    writer.write(arr,
    0, len);

    }

    writer.flush();

    }
    catch
    (IOException e)
    {

    //
    TODO
    Auto-generated catch block

    e.printStackTrace();

    }

    }
    catch
    (FileNotFoundException e)
    {

    //
    TODO
    Auto-generated catch block

    e.printStackTrace();

    }finally
    {

    //需要将打开的输入输出流关闭

    //原则为:先打开的后关闭,后打开的先关闭.都需要异常处理

    //两个异常处理可以合一块,在同一个try内判断是否为空并关闭对象即可。

    if(writer
    != null)
    {

    try
    {

    writer.close();

    }
    catch
    (IOException e)
    {

    //
    TODO
    Auto-generated catch block

    e.printStackTrace();

    }

    }

    if(reader
    != null)
    {

    try
    {

    reader.close();

    }
    catch
    (IOException e)
    {

    //
    TODO
    Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }

      • 字节流的高效缓冲字节流

publicstaticvoid
main(String[] args)
{

//定义一个高效缓冲字节流,可以复制图片

BufferedInputStream
in
=null;

BufferedOutputStream
out
= null;

try
{

//创建一个高效缓冲字节流对象

//和输入输出流一样都是需要关闭的,先开的后关,后开的先关

in
=new
BufferedInputStream(new
FileInputStream("E:\\Program
Files\\冒泡排序.jpg"));

out
= new
BufferedOutputStream(new
FileOutputStream("maopao.jpg"));

//定义一个字节数组

byte[]
bs
= newbyte[1024];

//定义一个标志

intlen;

try
{

while((len
= in.read(bs))
!= -1) {

out.write(bs,0,len);

}

}
catch
(IOException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}

}
catch
(FileNotFoundException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}finally
{

if(out
!= null)
{

try
{

out.close();

}
catch
(IOException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}

}

if(in
!= null)
{

try
{

in.close();

}
catch
(IOException e)
{

//
TODO
Auto-generated catch block

e.printStackTrace();

}

}

}

}

字符流和字节流的转换桥梁:

  • 字符流操作文本,字节流操作二进制,字节是最小的基本单位,一个字符占两个字节。

  • OutputStreamWriter:是字符流转换为字节流的桥梁,可使用指定的charset将要写入流中的字符编码成字节。

      • 编码:不同的编码格式得到的值不同!utf-8表和GBK,可以通过右键工程选择Propertise菜单进入编码格式编辑菜单。设置的编码格式如果和写入时保存的文件格式不同则会产生乱码,因此需要进行编码设置。字符流通向字节流的桥梁可以指定存储编码

I/O的简介的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. 论文阅读计划1(Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming & An Enforcement of Real Time Scheduling in Spark Streaming & StyleBank: An Explicit Representation for Neural Ima)

    Benchmarking Streaming Computation Engines: Storm, Flink and Spark Streaming[1] 简介:雅虎发布的一份各种流处理引擎的基准 ...

  2. Windows下用VC与QT编译MPI程序入门

    MPI是信息传递接口的简称,常用来进行进程间.机器间的通信与并行计算.一般而言,MPI都会部署在*nix系统下,在Windows下面直接编译.配置MPI并不容易.本文利用MS提供的编译好的MPI的版本 ...

  3. TextBox的Enable和ReadOnly属性的限制

    在以前的ASP.NET 1.x版本中,设置为ReadOnly的TextBox控件在客户端更改了值后,在服务器端仍然可以得到修改后的值,但在ASP.NET 2.0中,这种做法已经限制.这是为了提高应用程 ...

  4. Go语言学习——彻底弄懂return和defer的微妙关系

    疑问 前面在函数篇里介绍了Go语言的函数是支持多返回值的. 只要在函数体内,对返回值赋值,最后加上return就可以返回所有的返回值. 最近在写代码的时候经常遇到在return后,还要在defer里面 ...

  5. Spark学习之路(一)—— Spark简介

    一.简介 Spark于2009年诞生于加州大学伯克利分校AMPLab,2013年被捐赠给Apache软件基金会,2014年2月成为Apache的顶级项目.相对于MapReduce的批处理计算,Spar ...

  6. 跟我学SpringCloud | 第四篇:熔断器Hystrix

    跟我学SpringCloud | 第四篇:熔断器Hystrix 1. 熔断器 服务雪崩 在正常的微服务架构体系下,一个业务很少有只需要调用一个服务就可以返回数据的情况,这种比较常见的是出现在demo中 ...

  7. Java学习笔记-spring整合mybatis

    这个项目就是一个例子,只有添加图书的功能: 项目架构: resource: 整合流程: 1.pom文件节点,这两个是整合用的,其他节点不再赘述: <!-- https://mvnreposito ...

  8. Solr 18 - 通过SolrJ局部更新Solr中的文档 (原子操作、非覆盖操作)

    目录 1 需求分析 2 需求实现 2.1 pom.xml依赖 2.2 Java代码示例 3 补充说明 3.1 关于文档中_version_的取值说明 3.2 store=true/false的区别 1 ...

  9. 向Rocket.Chat推送消息

    Rocket.Chat推送消息 Rocket.Chat是一个开源实时通讯平台, 支持Windows, Mac OS, Linux. 支持聊天, 文件上传, 视频通话, 语音通话功能. 向Rocket. ...

  10. 蓝桥杯:矩阵乘法(区间DP)

    http://lx.lanqiao.cn/problem.page?gpid=T417 题意:…… 思路:n=1000,一开始觉得区间DP会超时,后来想不到其他做法就这样做了,居然没超时. 状态转移: ...