multipartfile创建⽂件流_Java基础字节流、字符流
主要内容
IO 流
字节流
字符流
异常处理
Properties
教学⽬标
能够说出IO流的分类和功能
能够使⽤字节输出流写出数据到⽂件
能够使⽤字节输⼊流读取数据到程序
能够理解读取数据read(byte[])⽅法的原理
能够使⽤字节流完成⽂件的复制
能够使⽤FileWirter写数据到⽂件
能够说出FileWriter中关闭和刷新⽅法的区别
能够使⽤FileWriter写数据的5个⽅法
能够使⽤FileWriter写数据实现换⾏和追加写
能够使⽤FileReader读数据
能够使⽤FileReader读数据⼀次⼀个字符数组
能够使⽤Properties的load⽅法加载⽂件中配置信息
第⼀章 IO概述
1.1什么是IO
⽣活中,你肯定经历过这样的场景。当你编辑⼀个⽂本⽂件,忘记了ctrl+s,可能⽂件就⽩⽩编辑了。当你电脑上插⼊⼀个U盘,可以把⼀个视频,拷贝到你的电脑硬盘⾥。那么数据都是在哪些设备上的呢?键盘、内存、硬 盘、外接设备等等。
我们把这种数据的传输,可以看做是⼀种数据的流动,按照流动的⽅向,以内存为基准,分为输⼊input和
输出output,即流向内存是输⼊流,流出内存的输出流。
Java中I/O操作主要是指使⽤java.io包下的内容,进⾏输⼊、输出操作。输⼊也叫做读取数据,输出也叫做作写出数据。
1.2IO的分类
根据数据的流向分为:输⼊流和输出流。
表单大师免费在线输⼊流 :把数据从 其他设备 上读取到 内存 中的流。
输出流 :把数据从 内存 中写出到 其他设备 上的流。
格局数据的类型分为:字节流和字符流。
字节流 :以字节为单位,读写数据的流。
字符流 :以字符为单位,读写数据的流。
1.3 IO的流向说明图解
数据库第五版王珊第七章1.4顶级⽗类们
第⼆章字节流
2.1⼀切皆为字节
⼀切⽂件数据(⽂本、图⽚、视频等)在存储时,都是以⼆进制数字的形式保存,都⼀个⼀个的字节,那么传输时⼀ 样如此。所以,字节流可以传输任意⽂件数据。在操作流的时候,我们要时刻明确,⽆论使⽤什么样的流对象,底 层传输的始终为⼆进制数据。
2.2字节输出流【OutputStream】
java.io.OutputStream 抽象类是表⽰字节输出流的所有类的超类,将指定的字节信息写出到⽬的地。它定义了字 节输出流的基本共性功能⽅法。
public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
public void write(byte[] b) :将 b.length字节从指定的字节数组写⼊此输出流。
public void write(byte[] b, int off, int len) :从指定的字节数组写⼊ len字节,从偏移量 off开始输 出到此输出流。
public abstract void write(int b) :将指定的字节输出流。
⼩贴⼠:
close⽅法,当完成流的操作时,必须调⽤此⽅法,释放系统资源。
2.3 FileOutputStream类
OutputStream 有很多⼦类,我们从最简单的⼀个⼦类开始。
android opengljava.io.FileOutputStream 类是⽂件输出流,⽤于将数据写出到⽂件。
构造⽅法
public FileOutputStream(File file) :创建⽂件输出流以写⼊由指定的 File对象表⽰的⽂件。
public FileOutputStream(String name) : 创建⽂件输出流以指定的名称写⼊⽂件。
当你创建⼀个流对象时,必须传⼊⼀个⽂件路径。该路径下,如果没有这个⽂件,会创建该⽂件。如果有这个⽂ 件,会清空这个⽂件的数
据。
构造举例,代码如下:
public class FileOutputStreamConstructor throws IOException { public static void main(String[] args) {// 使⽤File对象创建流对象File file = new File("a.txt");FileOutp 写出字节数据
1. 写出字节: write(int b) ⽅法,每次可以写出⼀个字节数据,代码使⽤演⽰:
public class FOSWrite {public static void main(String[] args) throws IOException {// 使⽤⽂件名称创建流对象FileOutputStream fos = new FileOutputStream(" ⼩贴⼠:
1.虽然参数为int类型四个字节,但是只会保留⼀个字节的信息写出。
2.流操作完毕后,必须释放系统资源,调⽤close⽅法,千万记得。
写出字节数组: write(byte[] b) ,每次可以写出数组中的数据,代码使⽤演⽰:
public class FOSWrite {public static void main(String[] args) throws IOException {// 使⽤⽂件名称创建流对象FileOutputStream fos = new FileOutputStream(" 1. 写出指定长度字节数组: write(byte[] b, int off, int len) ,每次写出从off索引开始,len个字节,代码 使⽤演⽰:
public class FOSWrite {public static void main(String[] args) throws IOException {// 使⽤⽂件名称创建流对象FileOutputStream fos = new FileOutputStream(" 数据追加续写
经过以上的演⽰,每次程序运⾏,创建输出流对象,都会清空⽬标⽂件中的数据。如何保留⽬标⽂件中数据,还能 继续添加新数据呢?
public FileOutputStream(File file, boolean append) : 创建⽂件输出流以写⼊由指定的 File对象表⽰的 ⽂件。
public FileOutputStream(String name, boolean append) : 创建⽂件输出流以指定的名称写⼊⽂件。
这两个构造⽅法,参数中都需要传⼊⼀个boolean类型的值, true 表⽰追加数据, false 表⽰清空原有数据。 这样创建的输出流对象,就
可以指定是否追加续写了,代码使⽤演⽰:
public class FOSWrite {public static void main(String[] args) throws IOException {// 使⽤⽂件名称创建流对象FileOutputStream fos = new FileOutputStream(" 写出换⾏
Windows系统⾥,换⾏符号是 。
以指定是否追加续写了,代码使⽤演⽰:
public class FOSWrite {public static void main(String[] args) throws IOException {// 使⽤⽂件名称创建流对象FileOutputStream fos = new FileOutputStream(" 回车符 和换⾏符 :
回车符:回到⼀⾏的开头(return)。
换⾏符:下⼀⾏(newline)。
系统中的换⾏: Windows系统⾥,每⾏结尾是 回车+换⾏ ,即 ;
Unix系统⾥,每⾏结尾只有 换⾏ ,即 ;
Mac系统⾥,每⾏结尾是 回车 ,即 。
从 Mac OS X开始与Linux统⼀。
2.4 字节输⼊流【InputStream】
java.io.InputStream 抽象类是表⽰字节输⼊流的所有类的超类,可以读取字节信息到内存中。它定义了字节输⼊ 流的基本共性功能⽅法。
public void close() :关闭此输⼊流并释放与此流相关联的任何系统资源。
public abstract int read() : 从输⼊流读取数据的下⼀个字节。
public int read(byte[] b) : 从输⼊流中读取⼀些字节数,并将它们存储到字节数组 b中 。
⼩贴⼠:
close⽅法,当完成流的操作时,必须调⽤此⽅法,释放系统资源。
2.5 FileInputStream类
java.io.FileInputStream 类是⽂件输⼊流,从⽂件中读取字节。
构造⽅法
properties文件用什么打开
FileInputStream(File file) : 通过打开与实际⽂件的连接来创建⼀个 FileInputStream ,该⽂件由⽂件系 统中的 File对象 file命名。
FileInputStream(String name) : 通过打开与实际⽂件的连接来创建⼀个 FileInputStream ,该⽂件由⽂件 系统中的路径名 name命
名。
当你创建⼀个流对象时,必须传⼊⼀个⽂件路径。该路径下,如果没有该⽂件,会抛出 FileNotFoundException 。
构造举例,代码如下:
public class FileInputStreamConstructor throws IOException{ public static void main(String[] args) {// 使⽤File对象创建流对象File file = new File("a.txt");FileInputSt 读取字节数据
1. 读取字节: read ⽅法,每次可以读取⼀个字节的数据,提升为int类型,读取到⽂件末尾,返回 -1 ,代码使 ⽤演⽰:
public class FISRead {public static void main(String[] args) throws IOException{// 使⽤⽂件名称创建流对象FileInputStream fis = new FileInputStream("");// 读循环改进读取⽅式,代码使⽤演⽰:
public class FISRead {public static void main(String[] args) throws IOException{// 使⽤⽂件名称创建流对象FileInputStream fis = new FileInputStream("");// 定⼩贴⼠:
虽然读取了⼀个字节,但是会⾃动提升为int类型。
流操作完毕后,必须释放系统资源,调⽤close⽅法,千万记得。
2. 使⽤字节数组读取: read(byte[] b) ,每次读取b的长度个字节到数组中,返回读取到的有效字节个数,读 取到末尾时,返回 -1 ,代码
使⽤演⽰:
public class FISRead {public static void main(String[] args) throws IOException{// 使⽤⽂件名称创建流对象.FileInputStream fis = new FileInputStream(""); //
错误数据 d ,是由于最后⼀次读取时,只读取⼀个字节 e ,数组中,上次读取的数据没有被完全替换,所以要通 过 len ,获取有效的字
节,代码使⽤演⽰:json格式美化
public class FISRead {public static void main(String[] args) throws IOException{// 使⽤⽂件名称创建流对象.FileInputStream fis = new FileInputStream(""); //⼩贴⼠:
使⽤数组读取,每次读取多个字节,减少了系统间的IO操作次数,从⽽提⾼了读写的效率,建议开发中使 ⽤。
2.6字节流练习:图⽚复制
复制原理图解
案例实现
复制图⽚⽂件,代码使⽤演⽰:
public class Copy {public static void main(String[] args) throws IOException {// 1.创建流对象// 1.1 指定数据源FileInputStream fis = new FileInputStream("D:est.jpg"⼩贴⼠:
流的关闭原则:先开后关,后开先关。
第三章字符流
当使⽤字节流读取⽂本⽂件时,可能会有⼀个⼩问题。就是遇到中⽂字符时,可能不会显⽰完整的字符,那是因为 ⼀个中⽂字符可能占⽤
多个字节存储。所以Java提供⼀些字符流类,以字符为单位读写数据,专门⽤于处理⽂本⽂ 件。
3.1 字符输⼊流【Reader】
java.io.Reader 抽象类是表⽰⽤于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输⼊ 流的基本共性功能⽅法。
public void close() :关闭此流并释放与此流相关联的任何系统资源。shell脚本调用另一个脚本
public int read() : 从输⼊流读取⼀个字符。
public int read(char[] cbuf) : 从输⼊流中读取⼀些字符,并将它们存储到字符数组 cbuf中 。
3.2 FileReader类
java.io.FileReader 类是读取字符⽂件的便利类。构造时使⽤系统默认的字符编码和默认字节缓冲区。
⼩贴⼠:
1. 字符编码:字节与字符的对应规则。Windows系统的中⽂编码默认是GBK编码表。 idea中UTF-8
2. 字节缓冲区:⼀个字节数组,⽤来临时存储字节数据。
3. 构造⽅法
4. FileReader(File file) : 创建⼀个新的 FileReader ,给定要读取的File对象。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。