java 输出流输入流

处理类型的不同:

字节流:0,1字节码

字符流:字符类型,不同编码格式不同表达形式

数据方向的不同:(主体是内存)

输入流:从外部文件读取数据到内存中

输出流:从内存中向外写东西

 

字节流:InputStream(输入抽象类)/ OutputStream(输出抽象类)

  • 字节流传输的最小数据单位为byte(字节)

 

 

字符流: Reader(输入抽象类) / Writer(输出抽象类)

  • 字符流传输的最小数据单位是char

 

 

file的用法:

 	File f =new File("d:/LOLFolder/LOL.exe");
 	f.exists();//判断是否存在
 	f.isDsirectory();//判断是否文件夹
	f.isfile();//是否文件
 	f.length();//长度

 	//文件最后修改时间
 	long time = f.lastModified();

 	//设置文件修改时间为1970.1.1 08:00:00
        f.setLastModified(0);
         
        // 以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
        f.list();
  
        // 以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
        File[]fs= f.listFiles();
  
        // 以字符串形式返回获取所在文件夹
        f.getParent();
  
        // 以文件形式返回获取所在文件夹
        f.getParentFile();
        // 创建文件夹,如果父文件夹skin不存在,创建就无效
        f.mkdir();
  
        // 创建文件夹,如果父文件夹skin不存在,就会创建父文件夹
        f.mkdirs();
  
        // 创建一个空文件,如果父文件夹skin不存在,就会抛出异常
        f.createNewFile();
        // 所以创建一个空文件之前,通常都会创建父目录
        f.getParentFile().mkdirs();
  
        // 列出所有的盘符c: d: e: 等等
        f.listRoots();
  
        // 刪除文件
        f.delete();
  
        // JVM结束的时候,刪除文件,常用于临时文件的删除
        f.deleteOnExit();
  

  

字节流:

----InputStream和OnputStream都是抽象类

读入操作:

File f =new File("d:/lol.txt");
      //创建基于文件的输入流
      FileInputStream fis =new FileInputStream(f);
      //创建字节数组,其长度就是文件的长度
      byte[] all =new byte[(int) f.length()];
      //以字节流的形式读取文件所有内容
      fis.read(all);
      for(byte b : all) {
        //打印出来是65 66
        System.out.println(b);
      }
 //每次使用完流,都应该进行关闭
     fis.close();
    

写出操作:

注意点:写出操作时,文件目录不存在会抛出错误,而单是文件不在则会创建文件

  File f = new File("d:/lol2.txt");
      // 准备长度是2的字节数组,用88,89初始化,其对应的字符分别是X,Y
      byte data[] = { 88, 89};
      // 创建基于文件的输出流
      FileOutputStream fos = new FileOutputStream(f);
      // 把数据写入到输出流
      fos.write(data);
      // 关闭输出流
      fos.close();

关闭流的方式

1、在try的作用域里面关掉(不推荐)

2、在finally里面关掉

3、在try()里面关掉——try-with-resources

字符流:

读取文件:

FileReader 是Reader子类,以FileReader 为例进行文件读取

File f = newFile("d:/lol.txt");
    // 创建基于文件的Reader
    try(FileReader fr = new FileReader(f)) {
      // 创建字符数组,其长度就是文件的长度
      char[] all = new char [(int) f.length()];
      // 以字符流的形式读取文件所有内容
      fr.read(all);
      for(char b : all) {
        // 打印出来是A B
        System.out.println(b);
      }

  

写入文件:

FileWriter 是Writer的子类,以FileWriter 为例把字符串写入到文件

 File f = new File("d:/lol2.txt");
    // 创建基于文件的Writer
    try(FileWriter fr = new FileWriter(f)) {
      // 以字符流的形式把数据写入到文件中
      String data=``"abcdefg1234567890";
      char[] cs = data.toCharArray();
      fr.write(cs);

练习题:给文件加解密

 

同步和异步

同步IO是指,读写IO时代码必须等待数据返回后才继续执行后续代码,它的优点是代码编写简单,缺点是CPU执行效率低。

而异步IO是指,读写IO时仅发出请求,然后立刻执行后续代码,它的优点是CPU执行效率高,缺点是代码编写复杂。

 

posted @ 2020-06-09 17:56    阅读(174)  评论(0)    收藏  举报