字节流 字符流
字节输入流 字节输出流 字符输入流 字符输出流
InputStream OutputStream Reader Writer (抽象类)
FileInputStream FileOutputStream FileReader FileWriter(实现类,低级流,原始流)
BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter(实现类,缓冲流)
> - Windows系统里,每行结尾是 `回车+换行` ,即`\r\n`;
> - Unix系统里,每行结尾只有 `换行` ,即`\n`;
> - Mac系统里,每行结尾是 `回车` ,即`\r`。从 Mac OS X开始与Linux统一。
字节输出流【OutputStream】:
- `public void close()` :关闭此输出流并释放与此流相关联的任何系统资源。
- `public void flush() ` :刷新此输出流并强制任何缓冲的输出字节被写出。
- `public void write(byte[] b)`:将 b.length字节从指定的字节数组写入此输出流。
- `public void write(byte[] b, int off, int len)` :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。
- `public abstract void write(int b)` :将指定的字节输出流。
- `public FileOutputStream(File file)`:创建文件输出流以写入由指定的 File对象表示的文件。
- `public FileOutputStream(String name)`: 创建文件输出流以指定的名称写入文件。
这两个构造方法,参数中都需要传入一个boolean类型的值,`true` 表示追加数据,`false`
public class FileOutputStreamDemo2 { public static void main(String[] args) throws IOException { OutputStream os=new FileOutputStream("d.txt");//追加数据管道 os.write(‘a‘); os.write(98); byte[] bytes={99,112,111,116,106}; os.write(bytes); os.write("\n".getBytes()); byte[] bytes1="我的名字很拽\r\n".getBytes(); System.out.println(bytes1.length); os.write(bytes1); byte[] bytes3="abcde".getBytes(); os.write(bytes3,0,3); //abcpotj os.close(); //我的名字很拽 //abc } }
字节输入流【InputStream】:
- `public void close()` :关闭此输入流并释放与此流相关联的任何系统资源。
- `public abstract int read()`: 从输入流读取数据的下一个字节。
- `public int read(byte[] b)`: 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。
- `FileInputStream(File file)`: 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
- `FileInputStream(String name)`: 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
public class FileInputStreamDemo2 { public static void main(String[] args) throws IOException { // File file = new File("b.txt"); // file.createNewFile(); // // InputStream is=new FileInputStream(file); // byte[] buffer=new byte[3]; // int read = is.read(buffer); // System.out.println(read); // String s=new String(buffer); // System.out.println(s); // // int read1 = is.read(buffer); // System.out.println(read1); // String s1 = new String(buffer); // System.out.println(s1); // // int read2 = is.read(buffer); // System.out.println(read2); // String s2 = new String(buffer); // System.out.println(s2); InputStream is= new FileInputStream("b.txt"); byte[] buffer=new byte[3]; int len=0; while((len=is.read(buffer))!=-1){ String s=new String(buffer,0,len); System.out.print(s); }
is.close(); } }
字符输入流【Reader】:
- `public void close()` :关闭此流并释放与此流相关联的任何系统资源。
- `public int read()`: 从输入流读取一个字符。
- `public int read(char[] cbuf)`: 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。
- `FileReader(File file)`: 创建一个新的 FileReader ,给定要读取的File对象。
- `FileReader(String fileName)`: 创建一个新的 FileReader ,给定要读取的文件的名称。
public class FileReaderDemo2 { public static void main(String[] args) throws IOException { // Reader fr=new FileReader("bb.txt"); // char[] buffer=new char[3]; // int len = fr.read(buffer); // String s=new String(buffer); // System.out.println(s); Reader fr = new FileReader("bb.txt"); char[] buffer=new char[1024]; int len; while ((len=fr.read(buffer))!=-1){ System.out.println(new String(buffer,0,len)); } fr.close(); } }
字符输出流【Writer】:
- `public abstract void close()` :关闭此输出流并释放与此流相关联的任何系统资源。
- `public abstract void flush() ` :刷新此输出流并强制任何缓冲的输出字符被写出。
- `public void write(int c)` :写出一个字符。
- `public void write(char[] cbuf)`:将 b.length字符从指定的字符数组写出此输出流。
- `public abstract void write(char[] b, int off, int len)` :从指定的字符数组写出 len字符,从偏移量 off开始输出到此输出流。
- `public void write(String str)` :写出一个字符串。
- `FileWriter(File file)`: 创建一个新的 FileWriter,给定要读取的File对象。
- `FileWriter(String fileName)`: 创建一个新的 FileWriter,给定要读取的文件的名称
**写出字符数组** :`write(char[] cbuf)` 和 `write(char[] cbuf, int off, int len)`
public class FileWriterDemo2 { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("www.txt"); fw.write("我"); fw.flush(); fw.write("爱"); fw.flush(); fw.write("中"); fw.close(); fw.write("国"); fw.close(); //报错 java.io.IOException: Stream closed } }
public class FileWriterDemo3 { public static void main(String[] args) throws IOException { FileWriter fw1 = new FileWriter("www.txt"); char[] ch="我爱中国".toCharArray(); fw1.write(ch,1,2); //爱中 fw1.write("\r\n"); String s="喜羊羊与灰太狼"; fw1.write(s,1,5); //羊羊与灰太 fw1.close(); } }
字节缓冲流:
* `public BufferedInputStream(InputStream in)` :创建一个 新的缓冲输入流。
* `public BufferedOutputStream(OutputStream out)`: 创建一个新的缓冲输出流。
// 创建字节缓冲输入流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bis.txt"));
// 创建字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bos.txt"));
public class BufferedStreamDemo1 { public static void main(String[] args) { long start=System.currentTimeMillis(); try(BufferedInputStream bis = new BufferedInputStream( new FileInputStream("E:\\素材\\鬼灭之刃-栗花落香奈乎(包含图片素材)\\tsy.mp4")); BufferedOutputStream bos=new BufferedOutputStream( new FileOutputStream("E:\\素材\\鬼灭之刃-栗花落香奈乎(包含图片素材)\\缓冲速度.mp4")); ) { byte[] bytes = new byte[8*1024]; int len; while ((len=bis.read(bytes))!=-1){ bos.write(bytes,0,len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } long end=System.currentTimeMillis(); System.out.println(end-start); //108 } }
字符缓冲流
* `public BufferedReader(Reader in)` :创建一个 新的缓冲输入流。
* `public BufferedWriter(Writer out)`: 创建一个新的缓冲输出流。
// 创建字符缓冲输入流
BufferedReader br = new BufferedReader(new FileReader("br.txt"));
// 创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
* BufferedReader:`public String readLine()`: 读一行文字。
* BufferedWriter:`public void newLine()`: 写一行行分隔符,由系统属性定义符号。
public class BufferedWriterDemo1 { public static void main(String[] args) throws IOException{ BufferedWriter bw = new BufferedWriter(new FileWriter("缓冲字符流.txt")); bw.write("我爱中国"); bw.newLine(); bw.write("我和他他他"); bw.write("\r\n"); bw.write("我们之间的距离"); bw.newLine(); bw.close(); BufferedReader bd = new BufferedReader(new FileReader("缓冲字符流.txt")); // int len; // while ((len=bd.read())!=-1){ // System.out.print((char) len); // } String line; while ((line=bd.readLine())!=null){ System.out.println(line); //我爱中国 //我和他他他 //我们之间的距离 } bd.close();