IO流
1.描述:
- 输入流(input):读数据
- 输出流(output):写数据
- 字节与字符:
- ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
- UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
2.字节流:
-
概念:
——InputStream:字符输入流的所有类的超类 ——OutputStream:字符输出流的所有类的超类 ——写数据 ——字节流写数据实现追加写入: ——————public FileOutputStream(String name,boolean append);创建文件时;第二个参数为true,则字节写入文件的末尾而不是开头 ——换行 ——————window:\r\n---------linux:\n------------mac:\r ——读数据 ——————文件没有数据读出为-1 读数据自动换行
-
使用:
-
写数据(抛出异常):
FileOutputStream bb=new FileOutputStream(new File("D:\\编程\\IDEA文件\\sda.txt")); bs.write(97); byte[] b={97,65,66,67,78,66,66}; bb.write(b,2,3); //字符组从下标1开始,长度为3 for(int i=0;i<5;i++){ fos.write("hellow".getBytes()); fos.write("\r\n".getBytes()); //换行符的字节形式 } bb.close();
-
写数据(try-catch):
FileOutputStream fos=null; try{ fos=new FileOutputStream("D:/编程/IDEA文件/hh.txt"); fos.write("hello".getBytes()); }catch(IOException er){ er.printStackTrace(); }finally{ try{ fos.close(); }catch (IOException e){ e.printStackTrace(); } }
-
读数据:
//文件没有数据读出为-1 //读数据自动换行 FileInputStream fr=new FileInputStream("D:/编程/IDEA文件/hh.txt"); //读取文本 int by; while((by=fr.read())!=-1){ System.out.print((char)by); } //读取字节数组 byte[] bys=new byte[1024]; int len; while((len=fr.read(bys))!=-1){ // System.out.println(new String(bys,0,len)); //字节数组转字符串 } fr.close();
-
复制文本:
FileInputStream fr=new FileInputStream("D:/编程/IDEA文件/hh.txt"); FileOutputStream fs=new FileOutputStream("D:/编程/IDEA文件/uh.txt"); int by; while((by=fr.read())!=-1){ System.out.print((char)by); fs.write(by); //写文件也自动换行 } fr.close(); fs.close();
-
3.字节缓冲流:
-
概念:
- 输入流BufferedInputStream
- 输出流BufferedOutputStream
- 通过一个字节缓冲区一次性把数据写到文件中
-
使用:
-
写数据:
BufferedOutputStream fs=new BufferedOutputStream(new FileOutputStream("D:/编程/IDEA文件/hh.txt")); fs.write("hello\r\n".getBytes()); fs.close();
-
读数据:
BufferedInputStream fs=new BufferedInputStream(new FileInputStream("D:/编程/IDEA文件/hh.txt")); //字节读 int by; while ((by=fs.read())!=-1){ System.out.print((char)by); } //字节数组读 byte[] bys=new byte[1024]; int len; while((len=fs.read(bys))!=-1){ //fs.read(bys)返回的是bys中的字符个数 System.out.println(new String(bys,0,len)); } fs.close();
-
4.字符流:
-
概念:
- 字符流=字节流+编码表
- Reader:字符输入的抽象类
- Writer:字符输出的抽象类
-
使用:
-
读数据+写数据:
FileReader fi=new FileReader("D:\\编程\\IDEA文件\\hh.txt"); FileWriter fs=new FileWriter("D:\\编程\\IDEA文件\\hs.txt"); //普通读取 int gg; while((gg=fi.read())!=-1){ fs.write(gg); } //读取字符数组 char[] ch=new char[1024]; int gg; while((gg=fi.read(ch))!=-1){ fs.write(ch); } fi.close(); fs.close();
-
5.字符缓冲流:
-
概念:
- BufferedWriter字符缓冲输出流
- BufferedReader字符缓冲输入流
-
方法:
- String readLine();读一行文字,没有返回null
- void newLine();换行
- flush();刷新流:从缓冲区内刷出数据
-
使用:
-
读数据:
BufferedReader fr=new BufferedReader(new FileReader("D:\\编程\\IDEA文件\\hh.txt")); String ss; while((ss= fr.readLine())!=null){ System.out.println(ss); } fr.close();
-
写数据:
BufferedWriter fs=new BufferedWriter(new FileWriter("D:\\编程\\IDEA文件\\hh.txt")); fs.write("sdads"); fs.newLine(); fs.close();
-