一、IO流原理及流的分类
1、IO流原理
a、I/O是 Input / Output的缩写,I/O技术是非常实用的技术,用于处理数据传输。如读/写文件,网络通讯等。
b、Java程序中,对于数据的输入/输出操作以 "流(stream)"的方式进行。
c、java.io包下提供了各种流类和接口,用以获取不同种类的数据,并通过方法输入或输出数据。
d、输入input:读取外部数据(磁盘、光盘、等存储设备的数据)到程序(内存)中。
e、输出output:将程序(内存)数据输出到磁盘、光盘等存储设备中
2、流的分类
a、按操作数据单位不同分为:字节流(二进制文件),字符类(文本文件)
b、按数据流的流向不同分为:输入流、输出流
c、按流的角色的不同分为:节点流,处理流/包装流
3、IO流体系图
二、IO流体系图-常用的类
1、InputStream:字节输入流
a、FileInputStream
* InputStream:字节输入流
* InputStream抽象类是所有类字节输入流的超类
* InputStream常用的子类
* 1.FileInputStream:文件输入流
* 2.BufferInputStream:缓冲字节输入流
* 3.ObjectInputStream:对象字节输入流
1.一个字节的读 @Test public void test(){ String filePath = "E:\\mine\\hello.txt"; int readLen; FileInputStream fileInputStream = null; try { // 创建FileInputStream对象用于读取文件 fileInputStream = new FileInputStream(filePath); while ((readLen = fileInputStream.read()) != -1){ System.out.print((char)readLen); } } catch (IOException e){ e.printStackTrace(); } finally { try { assert fileInputStream != null; fileInputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
2.字节数组的读
@Test public void test02(){ String filePath = "E:\\mine\\hello.txt"; int readLen; byte[] bytes = new byte[8]; FileInputStream fileInputStream = null; try { // 创建FileInputStream对象用于读取文件 fileInputStream = new FileInputStream(filePath); while ((readLen = fileInputStream.read(bytes)) != -1){ System.out.print(new String(bytes,0,readLen)); } } catch (IOException e){ e.printStackTrace(); } finally { try { if (fileInputStream != null){ fileInputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } }
2、OutputStream:字节输出流
@Test public void test03(){ String filePath = "E:\\mine\\a.txt"; OutputStream outputStream = null; try { // 创建写入对象 (覆盖) outputStream = new FileOutputStream(filePath); // 创建写入对象 (不覆盖) //outputStream = new FileOutputStream(filePath,true); String bytes = "你好,中国"; // 写入位数 outputStream.write(bytes.getBytes(StandardCharsets.UTF_8)); // 写入从off到off+len //outputStream.write(bytes.getBytes(),0,3); } catch (IOException e) { e.printStackTrace(); } finally { try { if (outputStream != null){ outputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } }
3、文件拷贝
@Test public void test04(){ String srcFilePath = "E:\\mine\\居家办公申请书.jpg"; String destFilePath = "E:\\mine\\居家办公申请书郭策.jpg"; FileInputStream fileInputStream = null; FileOutputStream fileOutputStream = null; try { // 创建读文件、写文件对象 fileInputStream = new FileInputStream(srcFilePath); fileOutputStream = new FileOutputStream(destFilePath); byte[] bytes = new byte[1024]; int readLen; while ((readLen = fileInputStream.read(bytes)) != -1){ fileOutputStream.write(bytes,0,readLen); } System.out.println("文件拷贝成功!"); } catch (IOException e){ e.printStackTrace(); } finally { try { if (fileInputStream != null){ fileInputStream.close(); } if (fileOutputStream != null){ fileOutputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } }