IO流:
输入流:是按程序来说的。比如文件到程序。
输出流:程序到文件。
字节流:InputStream/OutputStream
1.InputStream
read();读入一个字节并返回,包装为int,返回-1表示已读不到
read(byte[] b) 一次读入尽可能多的字节去填满字节数组b,返回实际读到的字节数,-1表示已读不到。
read(byte[] b, int off, int len) 一次读入尽可能多的字节去填满字节数组b从off开始的len个空间。
close()
package day11; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class TestInPutStream { public static void main(String[] args) throws IOException { InputStream is=null; is=new FileInputStream(new File("d:\\a.txt")); int i=0; while((i=is.read())!=-1){ System.out.println((char)i); } /*byte[] b = new byte[10]; int len = is.read(b); System.out.println(len);*/ is.close(); } }
在D盘中新建一个文本文档a.txt 里面内容为;abcde
则程序输出结果为:abcde
2.OutputStream
write(int b)
write(byte[] b)
write(byte[] b, int off, int len)
flush()
close()
例子:
package day11; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class TestOutputStream { public static void main(String[] args) throws IOException { OutputStream os = null; // 输出流:自己会新建一个文件 os = new FileOutputStream(new File("d:\\b.txt"),true); os.write(97); os.close(); } } 结果显示:输出流自己会新建一个文件,会在D盘新建一个b.txt文件,显示a
3.基本流/低级流/节点流
FileInputStream/FileOutputStream:
包装流:IO的精华。
基本流中构造中参数是介质。
包装流构造中参数是流。
package day11; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class TestCopyFile { public static void main(String[] args) throws IOException { copyFile("d:\\src.rar","d:\\dest.rar"); } public static void copyFile(String file1,String file2) throws IOException{ FileInputStream fis = new FileInputStream(new File(file1)); FileOutputStream fos = new FileOutputStream(new File(file2)); int b = 0; byte[] arrByte = new byte[8*1024]; // 读源文件,将读入的每个字节依次写入目标文件即可。 while((b=fis.read(arrByte))!=-1){ fos.write(arrByte,0,b); } // 流操作的最后一定要关闭 fis.close(); fos.close(); } } 结果:在D盘中,会将src.rar复制成为dest.rar.
4.包装流/高级流:
BufferedInputStream/BufferedOutputStream:缓冲流
DataInputStream/DataOutputStream:数据流
package day11; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class TestDISDOS { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream(new File("d:\\c.txt")); DataOutputStream dos = new DataOutputStream(fos); dos.writeDouble(3.14); dos.writeUTF("中国"); FileInputStream fis = new FileInputStream(new File("d:\\c.txt")); DataInputStream dis = new DataInputStream(fis); double d = dis.readDouble(); String s = dis.readUTF(); System.out.println(d); System.out.println(s); // 如何快速写小数 // BufferedOutputStream/DataOutputStream/FileOutputStream DataOutputStream out = new DataOutputStream( new BufferedOutputStream( new FileOutputStream(new File("d:\\c.txt")))); out.writeDouble(3.1415); // 对于包装流,关闭时候只关闭外层流就可以了,外层流中有对内层流的关闭。 dos.close(); dis.close(); out.close(); } } 结果:3.14 中国
5.字符流:Writer/Reader
InputStreamReader/OutputStreamWriter
FileReader/FileWriter
BufferedReader/BufferedWriter
package day11; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class TestIROW { public static void main(String[] args) throws IOException { File file = new File("d:\\b.txt"); /*FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis,"gbk");// 字节转字符 // 对于汉字来说,gbk/gb2312占两个字节,utf-8占三个字节。 char i = (char)isr.read(); System.out.println(i); FileOutputStream fos = new FileOutputStream(file); OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");*/ // osw.write("中国"); // for(int k=0;k<60000;k++){ // osw.write(k); // } // 系统默认编码 // FileReader fr = new FileReader(file); // char ch = (char) fr.read(); // System.out.println(ch); // 区别 1.不能指定编码格式,按系统编码格式。2.不能包装其他流 FileWriter fw = new FileWriter(file); fw.write("一二三四五\r\n"); fw.write("六七八九十"); fw.close(); // fr.close(); // osw.close(); // fis.close(); } } 结果:一二三四五 六七八九十