Java 字节输入流
糊涂涂是个小盆友 人气:0一、InputStream字节输入流
①、是一个抽象类,不能够创建对象,需要被继承才能够使用
②、在java.io包下,使用时需要导入
③、公共的方法:
方法一: int read()
方法二: int read(byte[] b)
方法三: void close()
更多方法请查看官方API
二、FileInputStream文件输入类
①、该类继承了InputStream,可以使用InputStream中的方法
②、能够把硬盘文件中的数据读取到内存中使用
③、构造方法
FileInputStream (String name) FileInputStream (File file)
参数的含义:
name 是文件的路径
file 是文件
作用:
创建对象
把对象指定到构造方法中药读取的文件
④、使用步骤
1、创建FileInputStream对象,构造方法中绑定要读取的数据源
2、使用对象中的read方法,读取数据
3、释放资源
⑤、read()方法
读取到文件末尾会返回-1(不管读多少次)
⑥、补充:String的构造函数
1、String (byte[] bytes) 把字节数组转换为字符串
2、String (byte[] bytes,int offset,int length) 把字节数组的一部分转换为字符串,从offset位置开始,取length长
⑦、一次性读取多个文件
// todo 一次性读取多个字节 // 1、定义一个字节数组 byte[] bytes = new byte[3]; // 2、创建文件输入对象 FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt"); // 3、读取文件 int read = fis.read(bytes); // 4、输出 System.out.println(new String(bytes));
⑧、使用循环一次性读取多个字节
// 一次性读取多个字节 byte[] bytes1 = new byte[1024]; FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt"); int len = 0; while ((len=fis.read(bytes1))!=-1){ System.out.println(new String(bytes1,0,len)); }
三、文件复制
原理:一读一写
目的:将A地址里面的a文件复制到B地址里面去
步骤:
1、创建一个字节输入流对象,构造方法中绑定要读取的数据源
2、创建一个字节输出流对象,构造方法中绑定要写入的目的地
3、使用字节输入流对象中的方法read读取文件
4、使用字节输出流对象中的方法write吧读取到的字节写入到目的地文件中
5、释放资源(先释放写的资源再释放读的资源,因为写完就代表已经读完了)
方式一:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileCopy { public static void main(String[] args) { try { long s = System.currentTimeMillis(); // 1、创建字节输入流 起始地 FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt"); // 2、创建字节输出流 目的地 FileOutputStream fos = new FileOutputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\copy\\a.txt"); // 3、读取数据并写入目的地 int len = 0; while ((len = fis.read())!=-1){ fos.write(len); } long e = System.currentTimeMillis(); System.out.println("传输文件总共用时:"+(e-s)+"毫秒"); // 4、释放资源 fos.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } }
耗时:2毫秒
方式二:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class FileCopy { public static void main(String[] args) { try { long s = System.currentTimeMillis(); // 1、创建字节输入流 起始地 FileInputStream fis = new FileInputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\a.txt"); // 2、创建字节输出流 目的地 FileOutputStream fos = new FileOutputStream("E:\\JavaCode\\JavaSE\\Day8-23\\src\\copy\\a.txt"); // 3、读取数据并写入目的地 byte[] b = new byte[1024]; int len = 0; while ((len = fis.read(b))!=-1){ fos.write(b,0,len); } long e = System.currentTimeMillis(); System.out.println("传输文件总共用时:"+(e-s)+"毫秒"); // 4、释放资源 fos.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } }
两者的区别:可以很明显的看出来方式一和方式二的区别在于:在循环的时候判断条件那里出现的不一样,使用方式二的方式可以是文件复制更加的快捷,在初期推荐使用第二种方式进行文件的复制
加载全部内容