Day18
1.IO流: InputStream(输入)在文件读取到内存 OutputStream(输出) 在内存中输入到文件内
io流的分类:
1.一个是按照流向来进行划分: 输入流与输出流InputStream(输入) OutputStream(输出)
2.一个是按照功能进行划分:字符流(Writer)与字节流(Reader)
字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
字符流 : 字符流只能操作纯字符数据,比较方便。
使用流的时候的注意事项: 1. 所有导入 java.io下的jar包
2. 需要注意异常
3. 释放资源,关闭资源
2.输出流: OutputStream 是把内存的数据写入到硬盘里
OutputStream 它是一个抽象类,不能被实例化
公有的方法:public void close() 关闭与释放资源
public void flush() 强制性刷新了缓存区
public void write(byte[] b) 将字节数据中的数据写入到输出流里
public void write(byte[] b,int off,int len) 将字节数组的数据指定区间写入到输出流里
(off从什么地方开始写 len写入的长度 作用:可以控制写的指定的内容)
public abstract void write(int b) 将字节写入到输出流里
子类: ByteArrayOutputStream 字节输出流
FileOutputStream 文件输出流(重点)
FilterOutputStream 过滤器输出流
ObjectOutputStream 对象输出流
PipedOutputStream 管道输出流
FileOutputStream:一般用于向文件写入数据
构造方法:public FileOutputStream(File file)
public FileOutputStream(String name)
public FileOutputStream(File file, boolean append)
第一个参数是 写入的位置 默认是true
第二个参数是 是否覆盖 如果传递的参数是true 表示不覆盖
1.实例化 FileOutputStream
2.如果这个文件不存在,会默认去常见这这个文件
3.把FileOutputStream 执行需要写入数据的位置(文件)
向文件写入数据的一个原理: java–>jvm —>OS(操作系统)–>调用操作系统的写入方法
写数据的方法:1. public void write(int b)
写数据的一个基本的步骤:1.实例化 FileOutputStream
2.调用其写的方法
3.关闭资源 如下:
//第一步需要实例化这个对象
OutputStream os = new FileOutputStream("1.txt");
// 调用其写的方法
os.write(97);
//关闭资源
os.close();
如何写多个字节(String s=“今天学习了io流的输入方法”)?
OutputStream os = new FileOutputStream(“5.txt”);
String s=“今天学习了io流的输入方法”;
byte [] b =s.getBytes();// 写字符串 ==>需要把字符串转换成字节数组getBytes())
os.write(b);
os.close();
byte[] b =new byte[]{-28,-72,-128,67,68};
//b[] 如果是负数:使用的是gbk 编码格式:两个负数表示一个中文
//b[] 如果是 utf-8 表示三个负数是一个中文
3.输入流 InputStream(也是一个抽象类)是从硬盘把数据读取到内存
子类:FileInputStream 文件输入流对象
给子类提供了很多公有的方法:
public int available() 返回的是当前输入流里的字节数
public void close() 关闭资源的方法
public abstract int read() 一个一个字节读取
public int read(byte[] b) 把数据读取到字节数组里
public int read(byte[] b,int off,int len) 可以读取指定区间的数据
构造方法: public FileInputStream(File file)
public FileInputStream(String name)
构造: 做了两件事 1.创建 FileInputStream 2. 把FileInputStream 对象执行你要读取的文件的位置
读取的原理: java--->jvm ==>0S(操作系统)--->调用操作系统的读取的方法()
输入流的一个大致步骤1.创建一个FileInputStream()
2.调用 read()方法来进行读取
3.关闭资源
如下:
InputStream is = new FileInputStream("5.txt");
byte [] b = new byte[1024];
// 确定了循环使用while循环
int length =-1;
while ((length=is.read(b)) !=-1){
System.out.println((char) length);
}
is.close();
-
如果文件里的内容是0-127对应的ascall码表
-
如果是其它的对应是系统默认的 编码(GBK)
-
返回值读取的是具体的数据
-
如果is.read() 返回值是-1表示读取完毕
public int read(int a) 把数据读取到字节数组里 public int read(byte[] b) 1. 第一个读取一个字节,第二个一次性读取多个字节到缓存区。 2. 返回值 第一个返回是具体的数据,第二个是读取有效字节的个数。 3. 第二个的效率会更高(尽量使用后者读取)。
4.使用bufferInputStream 与 bufferOutputStream进行读写操作 如下:
BufferedInputStream bis= new BufferedInputStream(new FileInputStream(“6.txt”));
BufferedOutputStream bos= new BufferedOutputStream(new FileOutputStream(“d:\小姐姐.txt”));
int leng =-1;
while ((leng= bis.read()) !=-1){
bos.write(leng);
}
flush();与close();
flush() 一个是讲缓存区里的数据刷到文件中 调用 flush() 方法之后流对象还可以使用
close() 关闭资源 调用 close() 方法之后 流对象不能使用
close() 方法内部调用了flush()
总结:今天学习了IO流的一部分内容,主要有1.IO流 2.输出流: OutputStream 3.输入流 InputStream 4.使用bufferInputStream 与 bufferOutputStream进行读写操作。IO流是用来处理设备之间的数据传输,Java对数据的操作是通过流的方式,用于操作流的类都在IO包中。 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的,而字符流只能操作纯字符数据。今天学的者是对于字节流的,对数据处理不是那么方便。而今天要记的单词有:1.Stream流 2.flush刷新 3.Piped管道 4.available可获得的