Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。
一,io流的概述和分类
io流介绍:
io:输入和输出(input/output)
流:是一种抽象的概念,是对数据传输的总称,也就是说数据在设备之间传输的现象称之为流,流的本质就是数据传输。
io流就是解决设备间传输的问题,比如文件上传,文件下载。
IO流的分类:
按照数据的流向
输入流:读数据
输出流:写数据
按照数据类型来分
字节流
字节输入流
字节输出流
字符流
字符输入流
字符输出流
二,下面将要使用的是两个重要的流是 FileInputStream 和 FileOutputStream(字节输出流:创建文件输出流以指定的名称String name写入文件)。
1.字节流抽象基类
inputStream:这个抽象类是表示字节输入流的所有类的超类;
OutputStream:这个抽象类表示字节输出流的所有类的超类;
字节输出流如何具体写入数据:
package Text01;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test9 {
public static void main(String[] args) throws IOException {
// 创建文件输出流
// 如若文件不存在,则创建这个文件。如若文件存在,文件会清空里面数据
// 1.创建文件输出流以指定的名字写入文件中
FileOutputStream fos = new FileOutputStream("D:\\AAXaple\\aa");
// 2.将指定的字节写入文件中
fos.write(00);
// 3.最后一步释放资源就好了
fos.close();
}
}
2.FileInputStream类
FileInputStream流主要用于读取数据,它的对象可以使用关键字new来创建,也可以使用多种构造方法来创建对象。
package Text01;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class Test10 {
public static void main(String[] args) throws FileNotFoundException {
// 1.使用字符串类型的文件名来创建一个输入流对象来读取文件:
InputStream file = new FileInputStream("D:/AAXaple/hello word");
// 2.可以使用一个文件对象来创建一个输入流对象来读取文件。我们首先得使用 File() 方法来创建一个文件对象
File f0 = new File("D:/AAXaple/hello word");
InputStream ips = new FileInputStream(f0);
}
}
3.创建InputStream对象,就可以使用多种的方法来读取流或者进行其他的流操作。
以下是方法及其概述
写数据方法分类:
方法名
void write(int b) // 将指定的字节写入文件输出流 一次写一个字节
void write (byte[] b) // 将b.length字节从指定的字节数组写入文件输出流
void write (byte[] b,int off,int len) //将len字节从指定的字节数组开始,从偏移量off开始写入文件输出流 一次写一个字节数据的部分数据
方法:
package Text01;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Test11 {
public static void main(String[] args) throws IOException {
// 1.使用字符串类型的文件名来创建一个输入流对象来读取文件:
InputStream file = new FileInputStream("AAXaple\\a.txt");
// 2.将指定的字节写入文件中
// void write(int b);
// file.write(00);
// file.write(11);
// file.write(22);
// 2.从输入流读取b.length长度的字节。返回读取的字节数。如果是文件结尾则返回-1
// void write(byte[] b);
byte[] bys = {01,02,03,04,05,06};
// 3.返回字符串对应的字节
// byte[] getBytes();
byte[] bys = "abcdes".getBytes();
file.write(bys);
// 4.释放资源
file.close();
}
}
4.FileOutputStream类
该类用来创建一个文件并向文件中写数据。
如果该流在打开文件进行输出前,目标文件不存在,那么该流会创建该文件。
有两个构造方法可以用来创建 FileOutputStream 对象。
使用字符串类型的文件名来创建一个输出流对象:
package Text01;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Test12 {
public static void main(String[] args) throws Exception {
// 1.使用字符串类型的文件名来创建一个输出流对象:
OutputStream f1 = new FileOutputStream("c:/java/hello word");
// 2.使用一个文件对象来创建一个输出流来写文件。我们首先得使用File()方法来创建一个文件对象:
File f2 = new File("c:/java/hello word");
OutputStream fOs = new FileOutputStream(f2);
}
}
创建OutputStream 对象,就可以使用多种的方法来读取流或者进行其他的流操作。
以下是方法及其概述
三,实现io流复制文件
package Text01;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class Test13 {
public static void main(String[] args) throws Exception {
// 1.根据数据源创建字节输入流对象
FileInputStream fis = new FileInputStream("D:/t.txt");
// 2.根据目的地数据源创建字节输出流对象
FileOutputStream fos = new FileOutputStream("D/p.txt");
// 3.读写数据,复制文本
int by;
while ((by= fis.read())!=-1){
fos.write(by);
}
// 4.释放资源
fos.close();
fis.close();
}
}