6. java IO 流
一、流的分类:
* 1.操作数据单位:字节流、字符流
* 2.数据的流向:输入流、输出流
* 3.流的角色:节点流、处理流
*
二、流的体系结构
* 抽象基类 节点流(或文件流) 缓冲流(处理流的一种)
* InputStream FileInputStream (read(byte[] buffer)) BufferedInputStream (read(byte[] buffer))
* OutputStream FileOutputStream (write(byte[] buffer,0,len) BufferedOutputStream (write(byte[] buffer,0,len) / flush()
* Reader FileReader (read(char[] cbuf)) BufferedReader (read(char[] cbuf) / readLine())
* Writer FileWriter (write(char[] cbuf,0,len) BufferedWriter (write(char[] cbuf,0,len) / flush()
三.案例
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils; import org.junit.Test; import java.awt.geom.CubicCurve2D; import java.io.*; import java.nio.file.FileAlreadyExistsException; import java.security.PublicKey; public class Filetest { @Test // 读文件 public void test1() { FileReader fr = null; try{ //1. 实例化File类的对象,指明要操作的文件 File file = new File("test"); //2. 提供具体的流 fr = new FileReader(file); //3.数据的读入 // read() 返回读入的一个字符,如果达到文件的尾部,返回-1 int data = fr.read(); while (data !=-1){ System.out.print((char)data); data = fr.read(); } }catch (IOException e){ e.printStackTrace(); }finally { //4. 关闭文件 if (fr !=null){ try { fr.close(); }catch (IOException e) { e.printStackTrace(); } } } } // 对read() 操作升级,使用read的重载方法 @Test // 读文件 public void test2(){ FileReader fr = null; try { //1. 实例化File 类的对象,指明要操作的文件 File file = new File("test2"); //2. 提供具体的文件流 fr = new FileReader(file); //3. 读入操作 // read(char [] cbuf) : 返回每次读入cbuf 数组中的字符的个数,如果达到文件末尾 返回-1 char[] cbuf = new char[5]; int len; while((len=fr.read(cbuf)) !=-1){ String str = new String(cbuf,0,len); System.out.print(str); } }catch (IOException e){ e.printStackTrace(); }finally { // 关闭资源 if(fr !=null){ try{ fr.close(); }catch (IOException e){ e.printStackTrace(); } } } } @Test //读写文件 public void test3(){ FileReader fr = null; FileWriter fw= null; // 读写文件 //创建文件类对象 try { File srcFile = new File("test"); File destFile = new File("test3"); // fr = new FileReader(srcFile); fw = new FileWriter(destFile); // 读取原文件写入到另一个文件 char [] cbuf = new char [10]; int len; while ((len = fr.read(cbuf)) !=-1){ fw.write(cbuf,0,len); } }catch (IOException e){ e.printStackTrace(); }finally { // 关闭文件 if (fr !=null){ try { fr.close(); }catch (IOException e){ e.printStackTrace(); } } if (fw !=null){ try { fw.close(); }catch (IOException e){ e.printStackTrace(); } } } } @Test//字节流方式读取文件 public void test4(){ FileInputStream fis = null; try { // 1. 造文件 File file = new File("1.png"); //2. 造流 fis = new FileInputStream(file); //3. byte[] bt = new byte[5]; int len; while ((len=fis.read(bt)) !=-1){ // String str = new String(bt,0,len); System.out.println(str); } }catch (IOException e){ e.printStackTrace(); }finally { // 关闭 if(fis !=null){ try { fis.close(); }catch (IOException e){ e.printStackTrace(); } } } } @Test // 复制图片 public void test5(){ // FileInputStream fis =null; FileOutputStream fos =null; try{ // 造文件 File srcFile = new File("1.png"); File descFile = new File("2.png"); //造流 fis = new FileInputStream(srcFile); fos = new FileOutputStream(descFile); // byte [] bt = new byte[1024]; int len; while ((len=fis.read(bt))!=-1){ fos.write(bt,0,len); } }catch (IOException e){ e.printStackTrace(); }finally { // 关闭操作 if (fis !=null){ try{ fis.close(); }catch (IOException e){ e.printStackTrace(); } } if (fos !=null){ try{ fis.close(); }catch (IOException e){ e.printStackTrace(); } } } } public void copyFile(String srcPath,String descPath){ FileInputStream fis =null; FileOutputStream fos =null; try{ // 造文件 File srcFile = new File(srcPath); File descFile = new File(descPath); //造流 fis = new FileInputStream(srcFile); fos = new FileOutputStream(descFile); // byte [] bt = new byte[1024]; int len; while ((len=fis.read(bt))!=-1){ fos.write(bt,0,len); } }catch (IOException e){ e.printStackTrace(); }finally { // 关闭操作 if (fis !=null){ try{ fis.close(); }catch (IOException e){ e.printStackTrace(); } } if (fos !=null){ try{ fis.close(); }catch (IOException e){ e.printStackTrace(); } } } } }
有疑问可以加wx:18179641802,进行探讨