java IO流
当不同的介质之间有数据交互的时候 JAVA就使用流来实现 数据源可以是文件 还可以是数据库 网络甚至是其他的程序 比如 站在程序的角度来看就叫做输入流 反之就是输出流
# ## IO流的分类
根据按照流向可分为:输入流(读取文件的数据到程序中 读取数据)和输出流(读取程序的数据写出到文件中 写出数据)
根据按照数据类型可分为:字节流(传输数据的最基本单位是字节的流)和字符流(传输过程中 传输数据的最基本单位是字符的流)
字节流可分为:字节输入流(读取数据 InputStream)和字节输出流(写出数据 OutputStream) 以Stream结尾大多数是字节流
字符流可分为:字符输入流(读取数据 Reader)和字符输出流(写出数据 Writer)
# ## InputStream
InputStream 是所有的输入字节流的父类 它是一个抽象类 其子类包括 ByteArrayInputStream StringBufferInputStream FileInputStream 分别从Byte 数组 StringBuffer 和本地文件中读取数据 PipedInputStream是从与其它线程共用的管道中读取数据
字节流读取数据方式有两种
int read() 一次读取一个字节
@Test public void readDate() throws IOException { FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java"); // //通过测试 读取的数据是-1 说明已经读取到文件的末尾了 int by = 0; // 读取,赋值,判断 while ((by = fis.read()) != -1) { System.out.print((char) by); } // 释放资源 fis.close(); }
使用流的时候一定要最后close() 有两个原因 1.让流对象变成垃圾 这样就可以被垃圾回收器回收了 2.通知系统去释放跟该文件相关的资源
int read(byte[] b) 一次读取一个字节数组
@Test public void readDate2() throws IOException { FileInputStream fis = new FileInputStream("FileOutputStreamDemo.java"); byte[] bys = new byte[1024]; int len = 0; while ((len = fis.read(bys)) != -1) { System.out.print(new String(bys, 0, len)); } // 释放资源 fis.close(); }
# ## OutStream
FileOutputStream构造:
FileOutputStream(File file) 参数为文件路径
FileOutputStream(String name) 参数为文件名 当前项目的跟目录下
@Test public void write() throws IOException { FileOutputStream fos = new FileOutputStream("d://fos.txt"); //写数据 fos.write("hello,IO".getBytes()); fos.write("java".getBytes()); fos.close(); }
public void write(int b) 写一个字节
@Test public void write() throws IOException { // 创建字节输出流对象 FileOutputStream fos = new FileOutputStream("fos.txt"); int text= 98; // 调用write()方法 fos.write(text); }
public void write(byte[] b) 写一个字节数组
@Test public void write() throws IOException { // 创建字节输出流对象 FileOutputStream fos = new FileOutputStream("fos1.txt"); byte[] bys={97,98,99,100,101}; fos.write(bys); }
public void write(byte[] b,int off,int len) 写一个字节数组的一部分
@Test public void write() throws IOException { // 创建字节输出流对象 FileOutputStream fos = new FileOutputStream("fos1.txt"); byte[] bys={97,98,99,100,101}; fos.write(bys,1,3); }