Java中的IO流(一):
https://blog.csdn.net/Veer_c/article/details/103833045
Java中的IO流(二):
https://blog.csdn.net/Veer_c/article/details/103833423
Java中的IO流(三):
https://blog.csdn.net/Veer_c/article/details/103833811
IO流分类:
IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。
根据流向可分为:输入流、输出流
根据数据类型可分为:
字节流:字节输入流、字节输出流
字符流:字符输入流、字符输出流
注意:一般我们在讨论IO的分类时,默认是按照数据类型分的。
字节流:
字节输入流 InputStream(抽象类)
字节输出流 OutputStream(抽象类)
字符流:
字符输入流 Reader
字符输出流 Writer
需求:请用字节流往一个文本文件中写一句话:”helloworld”。
分析:
首先要知道是字节流,写数据我们就应该知道是字节输出流,所以最终选择了OutputStream,而OutputStream是抽象类,所以我们应该找其子类,文件这个单词是File,所以就大胆的猜测下:FileOutputStream存在否。
如何往一个文件写数据,或者说就是字节输出流的操作步骤是什么呢?
A:创建字节输出流对象
B:调用写数据的方法
C:释放资源
flush()和close()的区别:
flush: 刷新缓冲区,流对象可以继续
close: 先刷新缓冲区,再关闭流对象。流对象不可以继续使用了。
public class OutputStreamDemo {
public static void main(String[] args) throws IOException {
/* 怎么使用文件输出流往文件中途写数据?
* 1.创建文件输出流对象
* 2.调用输出流对象的方法给文件中写数据
* 3.释放资源*/
//public FileOutputStream(String name)
//public FileOutputStream(File file)
//创建文件输出流对象
FileOutputStream fos = new FileOutputStream("a.txt");
//public FileOutputStream(File file)
//File file = new File("a.txt");
//FileOutputStream fos = new FileOutputStream(file);
/* FileOutputStream fos = new FileOutputStream("a.txt");
* 做了那些事情?
* 1.创建fos对象指向文件a.txt
* 2.创建一个文件a.txt */
//调用输出流的写数据的方法给文件中写数据
//public void write(byte[] b)
byte[] byf = "helloworld".getBytes();
fos.write(byf);
//释放资源,关流操作
fos.close();
//关流之后,我们还能继续往文件中写数据吗?
//不行的。。。
//fos.write("java".getBytes());//java.io.IOException: Stream Closed
}
}
两个构造的区别:
FileOutputStream(File file)
创建一个File对象,指向文件输出流;
FileOutputStream(String name)
创建一个具有文件名的输出流对象
FileOutputStream fos = new FileOutputStream(“fos.txt”);
请问上面这个操作做了哪几件事情?
1.创建了一个文件输出流fos,指向文件a.txt
2.创建了a.txt这个文件
fos.write(“helloworld”.getBytes());
fos.close();关流
fos.write(“java”.getBytes());
FileOutputStream 写数据的方法
write(byte[] b) :一次写入byte[]长度的字节
write(int b) :一次写一个字节
write(byte[] b, int off, int len) :一次写一个字节数组的一部分
字节输入流具体操作步骤:
字节输入流操作步骤:
A:创建字节输入流对象:
FileInputStream fis = new FileInputStream(“a.txt”);
B:调用方法读取数据
一次读取一个字节:read() – 读取不到内容的时候的返回值为 -1(并且用循环改进)
C:释放资源:fis.close
练习:
1.把a.txt的内容复制到b.txt中
2.从d:\中复制视频文件
数据源:
IODemo.java – 读取数据 – InputStream – FileInputStream – 一次读取一个字节
目的地:Copy.java – 写出数据 – OutputStream – FileOutputStream – 一次写一个字节。
1.把a.txt的内容复制到b.txt中
如果要复制文件的话:前提要保证文件在该项目的根目录下;要么就直接写该文件的绝对路径。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyFile {
public static void main(String[] args) throws IOException {
//A:把a.txt的内容复制到b.txt中
//封装数据源和目的地
FileInputStream fis = new FileInputStream("OutputStreamDemo.java");
FileOutputStream fos = new FileOutputStream("c.java");
//2.读取数据源中的数据,将读取到的数据写入目的地中
int by;
while ((by=fis.read())!=-1) {
//System.out.println(by);
//将读取到的字节写入fos中
fos.write(by);
}
//释放资源
fos.close();
fis.close();
}
}
2.复制视频文件
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyMp4 {
public static void main(String[] args) throws IOException {
//1.疯转数据源和目的地
FileInputStream fis = new FileInputStream("D://b.mp4");
FileOutputStream fos = new FileOutputStream("d.mp4");
//2.读取数据源,写如目的地
int by;
while ((by=fis.read())!=-1) {
fos.write(by);
}
//3.释放资源
fos.close();
fis.close();
}
}
字节输入流:具体操作步骤:
A:创建字节输入流对象
FileInputStream fis = new FileInputStream(“a.txt”);
B:调用方法读取数据(一次读取一个字节数组,提升效率),一次读取一个字节数组: public int read(byte[] b):返回实际读取长度,数据被读取到数组中。测试方法返回长度?根据String类的构造方法构造字符串
C:释放资源
fis.close(利用一次读写一个字节数组完成)
练习:
1.把a.txt的内容复制到b.txt中
2.把d:\复制视频文件
package cokm.edu_04;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyMp4 {
public static void main(String[] args) throws IOException {
//一次读写一个字节数组
//1.封装数据源和目的地
FileInputStream fis = new FileInputStream("D://b.mp4");
FileOutputStream fos = new FileOutputStream("e.mp4");
//一次读写一个字节数组
byte[] bys = new byte[1024];
int len;
while ((len=fis.read(bys))!=-1) {
//读取多少就给fos中写多少数据
fos.write(bys, 0, len);
}
//释放资源
fos.close();
fis.close();
}
}
字节缓冲区流(也叫高效流):
BufferedInputStream(read() 一次读取一个字节,
public int read(byte[] b):返回实际读取长度,数据被读取到数组中。)
BufferedOutputStream(write(byte[] b))
低级流::基本的流,可以直接操作文件。
高级流:是操作基本流的流。
Java中的IO流(一):
https://blog.csdn.net/Veer_c/article/details/103833045
Java中的IO流(二):
https://blog.csdn.net/Veer_c/article/details/103833423
Java中的IO流(三):
https://blog.csdn.net/Veer_c/article/details/103833811
来源:CSDN
作者:Veer_c
链接:https://blog.csdn.net/Veer_c/article/details/103833045