什么是输入流?
把硬盘中的数据读取到内存中使用
什么是输出流?
将内存中的数据写入到硬盘
输入输出的说法是从内存的角度上出发阐述的(仅个人理解)。
了解一下:一个字符等于两个字节一个字节等于八个二进制,计算机上的所有数据文件都是以二进制的形式保存的,在打开文件时文件编辑器会根据文件中的二进制码通过查询编码表(中文系统默认编码表GBK)转化为字符显示出来,如果二进制码在(0-127)之间会查询ascii码编码表然后转化为字符。
字节输出流
OutputStream是所有字节输出流的父类,我们了解一下OutputStream的子类之一 FileOutputStream
FileOutputStream常用的构造方法
//1.
//参数1:文件路径 参数2:(写入内容方式)false将文件的内容覆盖 true在文件内容后添加
FileOutputStream fos0 = new FileOutputStream("E:\\上传的文件\\a.text",false);
//2.
//参数1:文件路径 参数2:(写入内容方式)false将文件的内容覆盖 true在文件内容后添加
File file = new File("E:\\上传的文件\\a.text");
FileOutputStream fos02 = new FileOutputStream(file,false);
构造方法的作用:
1.创建一个人FileOutputStream对象
2.如果传的路径所指文件不存在,就新建这个文件
3.让创建的FileOutputStream对象指向参数路径所指文件
FileOutputStream常用的方法
//向文件写入单个字节 !写入时会将数字或其他数据转化为二进制
fos0.write(97);
//向文件写入字节数组如果字节数组中有负数那么这个负数将和它相邻后面的字节组成一个字符
fos0.write("我是123".getBytes());
//向文件写入字节数组中指定元素,从字节数组索引off开始到索引len停止
fos0.write("我是123".getBytes(),1,3);
//关闭流
fos0.close();
字节流输出流写入数据过程:java程序>JVM(java虚拟机)>OS(操作系统)>OS调用写数据的方法将数据写入到文件中
字节输入流
InputStream是所有字节输入流的父类,我们了解一下InputStream的子类之一 FileInputStream
FileInputStream常用的构造方法
//1.
//传入路径
FileInputStream fis = new FileInputStream("E:\\上传的文件\\a.text");
//2.
//传入File对象
File file = new File("E:\\上传的文件\\a.text");
FileInputStream常用的方法
//1.读取一个字节 返回值为读到的字节 如果将文件数据读取完毕返回-1
int a = fis.read();
//2.读取多个字节,返回值为读取到字节的个数,如果将文件数据读取完毕返回-1
byte[] bytes = new byte[4];
a=fis.read(bytes);
//关闭流
fos0.close();
输出读到的数据
//fis是FileOutputStream对象
byte[] bytes = new byte[4];
while((a=fis.read(bytes))!=-1){
System.out.println(new String(bytes,0,a));
}
字节流输入流读取数据过程:java程序>JVM(java虚拟机)>OS(操作系统)>OS调用读数据的方法将数据读入到内存
实战小项目-------代码实现复制
public static void main(String[] args) throws IOException {
//要复制文件的位置
FileInputStream fis = new FileInputStream("C:\\Users\\lenovo\\Desktop\\素材\\b.png");
//要粘贴文件的位置
FileOutputStream fos = new FileOutputStream("E:\\上传的文件\\b.png");
byte[] bytes = new byte[1024];
int len = 0;
while((len=fis.read(bytes))!=-1){
fos.write(bytes);
}
}
新手上路,请大佬们多多关照,欢迎指点