IO流2

一、IO流简介及分类

1、IO流简介

IO流: 简单理解数据从一个地方流向另外一个地方

2、IO流分类

按照数据流动的方向 分为  输入流和输出流

按照数据流动的单位分为   字节流和字符流

二、四大抽象流(都是抽象类)

1、FileInputStream(是InputStream接口的子类)

①构造方法

FileInputStream(String name); 根据指定的路径名创建字节输入流对象

FileInputStream(File file);

②注意:以上路径不存在,它会直接抛出异常

③read方法

int read(); 读取一个字节,返回的是ASCII值

int read(byte[] bytes);  读取多个字节,它把读取的字节放到bytes数组中,返回值返回的是读取的个数

④注意:以上方法,如果读取完毕之后都会返回-1

⑤完整代码:

FileInputStream fileInputStream = new FileInputStream(name);

byte[] bytes = new byte[10];

StringBuilder sb = new StringBuilder();

while(fileInputStream.read(bytes)!=-1){

sb.append(new String(bytes));

}

从上面这段代码我们可以看出,出现很多重复的字符

解决方式: 读多少,就取多少

new String(bytes,0,len);

改变以上代码

FileInputStream fileInputStream = new FileInputStream(name);

byte[] bytes = new byte[10];

StringBuilder sb = new StringBuilder();

int len;

while((len = fileInputStream.read(bytes))!=-1){

sb.append(new String(bytes,0,len));

}

fileInputStream.close();

以上代码解决了格式不正确问题!!

2、FileOutputStream

构造方法:

FileOutPutStream(String name); 以指定的路径创建字节输出流对象

FileOutPutStream(String name,boolean append);       append:表示是否在之前的基础上追加数据

FileOutPutStream(File file);

FileOutPutStream(File file,boolean append);

如果路径不存在,直接报错,如果路径存在,文件自动创建

重要方法:

void  write(int num);// 以ASCII进行输出

void  write(byte[] bytes); 一次性输出多个字节

void write(byte[] bytes,int offset,int len);

3、FileReader  

构造方法:

FileReader(String name); 根据指定的路径名创建字节输入流对象

FileReader(File file);

重要方法:

int read();每次只读取一个字符

int read(char[] chars);  一次读取多个字符

写个完整代码

FileReader f = new FileReader(name);

char[] chars = new char[10];

int len;

StringBuilder sb = new StringBuilder();

while((len = f.read(chars))!=-1){

sb.append(new String(chars,0,len));//只能解决格式问题

}

f.close();

4、FileWriter

FileWriter(String name); 以指定的路径创建字符输出流对象

FileWriter(String name,boolean append);       append:表示是否在之前的基础上追加数据

FileWriter(File file);

FileWriter(File file,boolean append);

重要方法:

void write(int num);

void write(char[] chars);

void write(String str);

当它输出数据的时候,它并不是直接输出到磁盘上,它是输出到内存中(缓存中),必 须要通过flush或者close方法,它会把内存里面的数据清空,同步到磁盘里面

flush与close的区别:

flush,清空内存里面的数据同步到磁盘里面,可以继续使用io流

close,在关闭流资源之前,它会先去调用flush的方法,io流一旦关闭之后,就不能继续使用

5、转换流

InputStreamReader(InputStream in);//把字节流转为字符流

OutputStreamWriter(OutputStream o)//把字符流转为字节流

三、乱码问题

为什么以上代码依然会出现中文乱码问题:原因它是把一个字掰成2半了

解决方式: 使用字符流来读取纯文本内容

出现中文乱码的三种情况:

1.编码和解码不一致

2.把一个中文字符掰成2半

3.字符编码集不支持中文   ---》ISO-8859-1  它眼里,所有的字符都是1个字节

编码: 把字符串转为字节数组

解码:把字节数组转为字符串

怎么去正确使用编码和解码呢?

统一都使用UTF-8的编码集, 你编码是以什么字符集编的,就以什么字符集进行解码

GBK--中文---2字节

UTF-8--中文--3个字节

原文地址:https://www.cnblogs.com/limengkun/p/10727154.html

时间: 2024-10-06 12:04:48

IO流2的相关文章

Java中的IO流

Java中的IO流是实现输入/输出的基础. 按照流的方向不同:分为输入流和输出流. 按照处理数据单位的不同:分为字节流(8位)和字符流(16位). 按照功能不同:分为节点流和处理流 所有面向字节的流类都继承于InputStream类(输入流) 或OutputStream类(输出流),这两个类是抽象类,我们可以利用它的子类来完成不同的功能. InputStream.OutputStream都是抽象类 InputStream抽象了应用程序读取数据的方式 OutputStream抽象类应用程序写出数据

Java IO流 探险

Java的IO流使用了一种装饰器设计模式,它将IO流分为底层节点流和上层处理流.本篇重点在如何访问文件与目录.如何以二进制格式和文本格式来读写数据.对象序列化机制.还有Java7的"NIO.2". 装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么自定义的该类称为装饰类. 装饰类通常会通过构造方法接收被装饰的对象.并基于被装饰的对象的功能,提供更强的功能. IO的方式通常分为:BIO(同步阻塞).NIO(同步非阻塞).AIO

Java 之IO流及应用

IO流 IO流概述及FileWriter类的使用 FileReader类使用 缓冲流介绍和使用 IO流相关案例 NO.one IO流概述及FileWriter类使用 1.1 IO流概述及分类 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的类都在IO包中 流按流向分为两种:输入流,输出流 1.2 FileWriter类使用 A:打开帮助文档 B:点击显示,找到索引,看到输入框 C:你要学习什么内容,你就在框框里面输入什么内容 举例:Random D:看包

IO流和File

读键盘数据.显示数据6-1)io流的分类 按方向:输入流(读取数据) 输出流(写入数据) 按数据类型:字节流(基本数据类型)输出输入 字符流(字节流的包装 对字节流进行处理)输出输入四个核心类: InputStream 字节输入流 OutStream 字节输出流 Reader 字符输入流 Writer 字符输出流6-2) 文件类 File d:/lxj/xx.txt 绝对路径 构造方法: File(String dir,String fileName) File(String path)//pa

Java笔记(19):IO流(01)

1.try...catch的方式处理异常1 1 package cn.itcast_02; 2 3 /* 4 * 异常:程序出现了不正常的情况. 5 * 6 * 程序的异常:Throwable 7 * 严重问题:Error 我们不处理.这种问题一般都是很严重的,比如说内存溢出. 8 * 问题:Exception 9 * 编译期问题:不是RuntimeException的异常 必须进行处理的,因为你不处理,编译就不能通过. 10 * 运行期问题:RuntimeException 这种问题我们也不处

java基础8(io流3)

1.LineNumberReader: public int getLineNumber():获取行号 public void setLineNumber(int lineNumber):设置起始行号 String readLine():读取一行 2.操作基本数据类型的流 DataInputStream:读数据 DataOutputStream:写数据 作用:可以操作基本类型的流对象,其读写顺序必须一致,否则数据有问题. public static void main(String[] args

java IO流

* IO流用来处理设备之间的数据传输 * Java对数据的操作是通过流的方式 * Java用于操作流的类都在IO包中 * 流按流向分为两种:输入流,输出流. * 流按操作类型分为两种: * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的 * 字符流 : 字符流只能操作纯字符数据,比较方便. * IO流常用父类 * 字节流的抽象父类: * InputStream * OutputStream * 字符流的抽象父类: * Reader * Writer * IO程序

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

5. IO流:★★★★★

IO流:★★★★★,用于处理设备上数据. 流:可以理解数据的流动,就是一个数据流.IO流最终要以对象来体现,对象都存在IO包中. 流也进行分类: 1:输入流(读)和输出流(写). 2:因为处理的数据不同,分为字节流和字符流. 字节流:处理字节数据的流对象.设备上的数据无论是图片或者dvd,文字,它们都以二进制存储的.二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节.意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据. 那么为什么要有字符流呢?因

理解IO流:InputStream和OutputStream,FileInputStream和FileOutputStream,Reader和Writer,FileReader和FileWriter,BufferedInputStream 和 BufferedOutputStream, BufferedReader 和 BufferedWriter,转换流

/* * 1.理解 "流" ? * 动态性.连续性.方向性. * * 2.在java语言中,将数据的输入/输出称之为 IO流. IO流的分类: * 1) 从方向分: 输入流 , 输出流. (参照计算机的内存) * 将数据送到内存中去称之为输入流.反之,称之为输出流. * * 2) 从处理单位来分: 字节流(8位二进制数据), 字符流(16位二进制数据). * * 3) 从是否有数据源来分: 节点流(有数据源), 处理流(必须套在节点流上). * * 3.在Java语言中,所有流类均来自