FileOutputStream(写): FileOutputStream out =new FileOutputStream(“a.txt”,true);可以追加内容。输出流若文件不存在会自动帮你创建。 out.write(int b):写一个字节 超过一个字节 砍掉前面的字节。 out.write(byte[] b):写一个字节数组。 out.write(byte[] b,int off,int len):写一个字节数组的一部分。从第几个字节输入多少个字节 out.write(“/r/n”)换行符。 out.close();释放资源。 FileInputStream(读): FileInputStream in =new FileInputStream(“a.txt”); in.read()一次读一个字节,读取不到返回-1。 byte[] bytes=new byte[1024]; in.read(bytes);一次读一个字节数组。读不到返回-1。 in.read(bytes,0,4);一次读一部分,从0开始读取4个有效字节。 in.close();释放资源。
BufferOutputStream和BufferInputStream这对流底层加入了缓冲区。读取速度快一些。 BufferOutputStream(写): 该类实现缓冲的输出流。通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字节写入调用底层系统。 BufferInputStream(读): 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。
OutputStreamWriter(写): 输出流关联的文件不存在会帮你创建。 OutputStreamWriter out=new OutputStream(new FileOutputStream(“a.txt”),true),“UTF-8”)可以追加内容,指定UTF-8编码 out.write(int c);一次一个字符 out.fiush();必须刷新 out.write(String str);一次一个字符串 out.write("\r\n");换行符 out.write(char[] cbuf,int off ,int len);一次写一部分 out.write(char[]);一次写一个字符数组 out.close();关闭并刷新 InputStreamReader(读): 输入流关联的文件不存在会报错 InputStreamReader in =new InputStreamReader(new FileInputStream(“a.txt”),“UTF-8”); in.read();一次读一个字符。 char[] chars=new char[100]; int len=in.read(chars);一次读一个字符数组如果没读到返回-1。 int len=in.read(chars,0,2);从0开始读取2个字符返回的是读取到的有效字符。
BufferedWriter(写): BufferedWriter bfw=new BufferedWriter(new FileWriter(“a.txt”,true);可以追加内容默认编码表 bfw.newLine();换行符具有平台兼容性 BufferedReader(读): BufferedReader bfr=new BufferedReader(new FileReader(“a.txt”); bfr.readLine();一次读一行读不到返回null
DataInputStream输入流 从硬盘读到内存。DataOutputStream输出流从内存写到硬盘。怎么写怎么读。
ByteArrayOutputStream: 此类实现了一个输出流,其中的数据被写入了一个byte数组。缓冲区会随着数据的不断写入而自动增长。可使用toByteArray()和toString()获取数据。关闭ByteArrayOutputStream无效,此类中的方法在关闭此流后仍然可被调用,而不会产生任何IOException。
write(int b);write(byte[] b,int off,int len);write(OutputStream out);write(byte[] b);ByteArrayOutputStream out=new ByteArrayOutputStream(); out.write(“长江”.getBytes()); ByteArrayInputStream: 使用buf作为其缓冲区数组 byte[] bytes=out.toByteArray(); ByteArrayInputStream in=new ByteArrayInputStream(bytes); byte[] bytes1=new byte[1024]; int len=in.read(bytes1);记录有效字节个数 System.out.println(bytes1,0,len);
打印流只关联目标文件,不关联源文件。 PrintStream:字节打印流: 关联屏幕或者文件。字节打印流,为其他输出流添加了功能,使他们能够方便的打印各种数据值的表现形式。 PrintStream out =System.out;标准输出流,关联屏幕。 PrintStream out=new PringtStream(a.txt);关联文件a.txt。 out.println(“abc”); out.print(“一行数据”.getBytes()); out.write(100); out.close(); PrintWriter:字符打印流: 只能关联文件。 PrintWriter(OutputStream out, boolean autoFlush)通过现有的OutputStream 创建新的PrintWriter。如果启动了自动刷新,只有调用println,printf或者format的其中一个方法才可以完成此操作。 键盘录入: 第一种: InputStream in = System .in;标准输入流,关联键盘。 Scanner sc=new Scanner(in); 第二种: BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in));
此流最大的特点是能读能写。二来可以设置文件指针的位置。 RandomAccessFile raf=new RandomAccessFile(“e.txt”,“rw”); raf.getFilePointer();获取当前文件指针位置。 String s =raf.readUTF();使用modifiedUTF-8。首先把两个字节从当前文件写入此文件,类似于使用writeshort方法给定跟随的字节数。 raf.seek();跳转到此文件位置。
属性集合,双列集合 键值默认都是字符串类型。 Properties properties=new Properties(); properties.setProperty(“李四”,“王五”); properties.store(new FileWrite(“sh.properties”),null);将属性集合中的键值对数据,存到文本中。参2是文件的注释。文件中用=连接。 properties.load(new FileInputStream(“sh.properties”));遍历读取properties.entrySet();
顺序流。按顺序读并合并成一个文件。 表示其他输入流的逻辑串联。它从输入流的有序集合开始,并从第一个输入流开始,并从第一个输入流的有序集合开始读取,直到到达文件末尾,接着从第二个流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。 SequenceInputStream(InputStream s1,InputStream s2) 通过记住这两个参数来初始化新创建的SequenceInputStream(将按顺序读取这两个参数,先读s1,再读s2),以提供从此SequenceInputStream读取的字节。 SequenceInputStream(Enumeration<?extends InputStream > e):传入一个类型为InputStream对象的Enumeration型参数。 //复制多个文件 public class Test{ public static void main(String[] args)throws IOException{ FileInputStream in1=new FileInputStream(“a.txt”); FileInputStream in2=new FileInputStream(“b.txt”); FileInputStream in3=new FileInputStream(“c.txt”); FileOutputStream out =new FileOutputStream(“all.txt”); Vector vector=new Vector<>(); vector.add(in1); vector.add(in2); vector.add(in3); Enumeration enumeration =vector.elements(); SequenceInputStream allIn=new SequenceInputStream(); in len=0; byte[] bytes=new byte[1024*8]; While(){ out.write(bytes,0,len); } allIn.close(); out.close(); } }
ObjectOutputStream序列化流:将一个对象保存到文件中。 1.要保证一个对象能保存到文件中,序列化时类得实现serilizable标记接口告诉JVM保存对象。 2.序列化后再加上一个静态的常量的UID。 3.transient修饰的这个字段不需要保存到文件中去。 ObjectInputStream反序列化流:读取对象。
