- FileInputStream:万能的文件字节输入流,任何类型的文件都可以采用这个流来读。
——以字节的方式,完成输入的操作,完成读的操作(硬盘 >>> 内存) - FileInputStream中常用的方法:
- intread():从输入流中读取数据的下一个字节;如果读取不到数据时返回-1。
- intread(byte[] b):byte数组中一次最多读取 b.length 个字节,返回读取到的字节数量。
- intavailable():返回流当中剩余的没有读到的字节数量。
- longskip(long n):跳过几个字节不读。
- voidclose():关闭此输入流并释放与该流关联的所有系统资源。
public class FileInputStreamTest01 { public static void main(String[] args) { //定义一个文件字节输入流 FileInputStream fis = null; try { //new一个文件字节输入流并捕捉异常 fis = new FileInputStream("src/com/javaSE/io/tempfile"); //===========================尝试read()方法================================ //==========================尝试read(byte[] b)方法=========================== //============================尝试available()方法============================= //===========================尝试skip(long l)方法============================= fis.skip(3);//跳过几个字节不读 System.out.println(fis.available());//获得还剩余的字节数 byte[] bytes = new byte[fis.available()]; System.out.println(new String(bytes,0,fis.read(bytes))); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ //如果有文件输入流则关闭此文件输入流并释放与此流有关的所有系统资源 if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
二、java.io.FileOutputStream
- FileOutputStream:万能的文件字节输出流,任何类型的文件都可以采用这个流来写。
——以字节的方式,完成输出的操作,完成写的操作(内存 >>> 硬盘) - FileOutputStream中常用的方法:
- voidwrite(byte[] b):将 b.length 个字节从指定 byte 数组写入此文件输出流中。
- voidwrite(byte[] b, int off, int len):将指定 byte 数组中从指定下标开始的 len 个字节写入此文件输出流。
public class FileOutputStreamTest01 { public static void main(String[] args) { FileOutputStream fos = null;//定义一个文件字节输出流 try { //输出到指定路径的文件中并覆盖其内部全部内容(谨慎使用),文件不存在的时候会自动新建 //fos = new FileOutputStream("E:\temporaryFiles"); //输出到指定路径的文件中(append为ture时为追加到文件末尾),文件不存在的时候会自动新建 fos = new FileOutputStream("src/com/javaSE/io/tempfile", true); byte[] bytes = "你好世界hallo world".getBytes();//将字符床转为byte数组 fos.write(bytes); fos.flush();//输出刷新(输出流必备) } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
三、使用FileInputStream + FileOutputStream完成文件的拷贝
- 拷贝的过程应该是一边读,一边写。
- 使用以上的字节流拷贝文件的时候,文件类型随意,万能的。什么样的文件都能拷贝。
public class CopyTest01 {
public static void main(String[] args) {
//定义文件输入输出流
FileInputStream fis = null;
FileOutputStream fos = null;
try {
//创建文件输入输出流
fis = new FileInputStream("D:\资料\动力节点\20210419-JavaSE图书管理系统项目实战\视频\01-项目简介.mp4");
fos = new FileOutputStream("E:/01-项目简介.mp4");
//创建一个byte数组
byte[] bytes = new byte[1024 * 1024];//1024*1为1kb,1024*1024为1mb
int readCount = 0;//读取计数
while ((readCount = fis.read(bytes)) != -1) {//读取,读取多少存到数组多少
fos.write(bytes,0,readCount);//编写,存到数组多少编写多少
}
//输出刷新(输出流必备)
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
四、FileReader & FileWriter
- FileReader & FileWriter :文件字符 输入&输出 流,只能读取普通文本。
- FileReader & FileWriter 与 FileInputStream & FileOutputStream 使用方式相似。



