Day21
一、学习目标
1.IO
2.字节流
3.FileInputStream类
二、知识点
1.IO
当你编辑一个文本文件忘记了Ctrl+s后,文件可能就白白编辑了,当你从电脑上插入一个U盘,可以把一个视频拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。
我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出output,即流向内存是输入流,流出内存的是输出流。Java中IO操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做写出数据。
- IO的分类
根据数据的流向分为:输入流和输出流。
●输入流:把数据从其他设备上读取到内存中的流
●输出流:把数据从内存中写出到其他设备上的流
格局数据的类型分为:字节流和字符流。
●字节流:以字节为单位,读写数据的流。
●字符流:以字符为单位,读写数据的流。
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方法,当完成流的操作时,必须调用此方法,释放系统资源。
3.FileInputStream类
java.io.FileInputStream类是文件输入流,从文件中读取字节。
构造方法: - FileInputstream(File file):通过打开与实际文件的连接来创建一个FilelnputStream,该文件由文件系统中的File对象file命名。
- FileInputStream(String name):通过打开与实际文件的连接来创建—个 Filelnputstream,该文件由文件系统中的路径名name命名。
当你创建一个流对象时,必须传入个文件路径。该路径下,如果没有该文件,会抛出FileNotFoundE xception。 - 读取字节数据
读取字节:read方法,每次可以读取一个字节的数据,提升为int类型,读取到文件末尾。
三、应用运行
1.IO
代码示例
package demo01;
import java.io.FileInputStream;
import java.io.IOException;
public class Demo01InputStream {
public static void main(String[] args) throws IOException {
//1.创建FileInputStream 对象,构造方法中绑定要读取的数据
FileInputStream fis= new FileInputStream("D:\\Professional knowledge\\java\\xiaoeclipse\\a.txt");
//2.使用read 方法,读取问
/*int len= fis.read();
System.out.println(len);
len= fis.read();
System.out.println(len);
len= fis.read();
System.out.println(len);
len= fis.read();
System.out.println(len);
len= fis.read();
System.out.println(len);
*/
int len=0;
while((len=fis.read())!=-1) {
System.out.println((char)len);
}
//释放资源
fis.close();
}
}
运行结果
2.字节流
代码示例
package demo01;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
public class Dwmo02InputStream {
public static void main(String[] args) throws IOException {
FileInputStream fis= new FileInputStream("D:\\Professional knowledge\\java\\xiaoeclipse\\a.txt");
/*byte[] bytes=new byte[2];
int len=fis.read(bytes);//65、66
System.out.println("读取到的长度"+len);
//System.out.println(bytes[0]);//取出数组里面的值
//System.out.println(bytes[1]);
//System.out.println(Arrays.toString(bytes));
System.out.println(new String(bytes));
len=fis.read(bytes);
System.out.println("读取到的长度"+len);
System.out.println(new String(bytes));
len=fis.read(bytes);
System.out.println("读取到的长度"+len);
System.out.println(new String(bytes));
len=fis.read(bytes);
System.out.println("读取到的长度"+len);
System.out.println(new String(bytes));
*/
byte[] bytes=new byte[8];
int len=0;
while((len=fis.read(bytes))!=-1) {
System.out.println(len);
System.out.println(new String(bytes));
}
fis.close();
}
}
运行结果
3.FileInputStream类
代码示例
package demo02;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
public class Demo01Reader {
public static void main(String[] args) throws IOException {
FileReader fr= new FileReader("D:\\Professional knowledge\\java\\xiaoeclipse\\a.txt");
/*int len=0;
while((len=fr.read())!=-1){
System.out.println((char)len);
}*/
char[] cs=new char[9];
int len=0;
while((len=fr.read(cs))!=-1){
System.out.println(len);
System.out.println(new String(cs));
}
}
}
package demo02;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo02Writer {
public static void main(String[] args) throws IOException {
FileWriter fw= new FileWriter("D:\\Professional knowledge\\java\\xiaoeclipse\\a.txt");
fw.write(100);//需要被写入的字符还在缓冲区
fw.flush();
fw.write(101);
fw.flush();
fw.write(102);
fw.flush();
fw.write(103);
fw.flush();
fw.close();//如果你只写一个自己,那就可以直接用close,但是实际生活中可能或写多次数据
fw.write(103);
}
}
运行结果