I/O流操作

什么是流

* 数据的流动,称为流,硬盘和内存之间的数据交互
* 流按照方向分,分为输入流和输出流,以内存作为参照物。将数据从数据源读取到内存,为输入流,也称为读取流。将数据从内存中写入数据源,为输出流,也称为写入流。
* 流放在I/O包里

流的分类
按照类型分类可以分为字节流,字符流和对象流。

1. 字节流:以字节方式传输,所有类型均能传输
2. 字符流:只能传输字符串
3. 对象流:传输对象

由于计算机采用二进制。数据的传输都是以字节为单位传输。所以,无论那种流,其本质都是字节流。不过,为了方便字符数据和对象数据的传输,可以在字节流基础上进行封装,形成字符流和对象流,所有的流都使用int类型去接收

InputStream和OutputStrem
InputStream和OutpuuStrem是字节流的两个父类,这个两个类是抽象类,提供了read()和write()两个抽象方法。由子类根据自己数据源的特点分别做实现
流操作的步骤

1. 建立流
2. 操作流
3. 关闭流

当做文件流操作时,读取流会抛出文件问找到FileNotFoundException异常。写入流会新建文件,但是前提是文件所在目录必须存在。否则也会抛出FileNotFoundException

创建读取流

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class InputText {

      public InputText() {
            //外面声明变量,内部实例化,方便在finlly中关闭
            InputStream in = null;
            try {
                  //创建文件读取字节流
                  in = new FileInputStream("D:\\文档\\图片\\素材\\1.jpg");
                  int data=0;
                  //一次只读一个字节,读取完毕返回-1
//                while((data=in.read())!=-1){
//                      System.out.println(data);
//                }
                  //使用byte数组接收
                  int len=0;
                  byte[]by=new byte[1024];
                  //一次读取1024个字节,放入byte数组,返回本次读取的字节数
                  while((len=in.read(by))!=-1){
                        System.out.println(len);
                  }

            } catch (Exception e) {
                  e.printStackTrace();
            }finally{
                  try {
                        //关闭流通道方法
                        in.close();
                  } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                  }
            }

      }

      public static void main(String[] args) {
            // 对象没有被变量指向会被垃圾回收,但是当对象正在运行则不会回收
            new InputText();

      }

}

创建写入流

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class OutputTest {
      public OutputTest(){

            OutputStream out=null;
            try {
                  //创建写入字节流
                  out =new FileOutputStream("1.txt");
                  //默认为覆盖写入,如果第二个参数为真,表示追加写入
                  out =new FileOutputStream("1.txt",true);

//                //写入数据,只能是byte类型
//                out.write(100);

                  //写入字节数组
                  out.write("努力一点,多挣点钱。".getBytes());

            } catch (Exception e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }finally{
                  try {
                        out.close();
                  } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                  }
            }


      }


      public static void main(String[] args) {
            OutputTest o=new OutputTest();

      }

}

Reader和Write
Reader和Write是字符流的两个父类。可以直接对字符串进行操作

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class ReaderTest {

      public ReaderTest() {
            // 字符流只能读取文本文件
            Reader r = null;
            //Reader与BufferedReader配合使用
            BufferedReader br = null;

            try {
                  r = new FileReader("img/1.txt");
                  br = new BufferedReader(r);
                  String str = null;
                  while ((str = br.readLine()) != null) {
                        System.out.println(str);
                  }

            } catch (Exception e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            } finally {
                  try {
                        br.close();
                        r.close();
                  } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                  }

            }
      }

      public static void main(String[] args) {
            ReaderTest r = new ReaderTest();
      }

}

Write代码

import java.io.FileWriter;
import java.io.FilterWriter;
import java.io.IOException;
import java.io.Writer;

public class WriteTest {

      public WriteTest(){
            Writer w=null;
            try {
                  //第二个参数如果不写表示默认覆盖,写了真表示换行输入
                  w=new FileWriter("3.txt");
                  
                  w.write("你好,欢迎光临\n");
                  w.write("今天下雨");

            } catch (Exception e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }finally{
                  try {
                        w.close();
                  } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                  }

            }

      }

      public static void main(String[] args) {
            WriteTest w=new WriteTest();

      }

}

File 文件类
写入流会新建文件,但是前提是文件所在目录必须存在。否则也会抛出FileNotFoundException

import java.io.File;

public class FileText {

      public static void main(String[] args) {
            // 创建一个文件对象
            File f = new File("D:/文档/JAVA/朗沃/作业");

            // 得到文件对象描述的绝对路径
            System.out.println(f.getAbsolutePath());

            // 判断文件是否存在,返回boolean值,存在返回真
            boolean isHas = f.exists();
            System.out.println(isHas);
            // 判断指定目录是否存在,如果不存在,系统自动创建一个对应目录
            if (f.exists() == false) {
                  f.mkdirs();
            }

            // 判断文件对象代表的是文件还是目录, 是文件返回真,目录返回假
            System.out.println(f.isFile());
            // 判断文件对象代表的是文件还是目录,是目录返回真,文件返回假
            System.out.println(f.isDirectory());

            //删除文件或目录,如果删除文件可以直接删除,删除目录必须保证目录为空目录
            File s=new File("D:/文档/JAVA/朗沃/作业/Test.txt");
            s.delete();

            File w=new File("C:/Recovery");
            //得到目录中的所有文件对象,不包括子目录中的文件或目录
            File[] farray=w.listFiles();
            for(File x:farray){
                  System.out.println(x.getAbsolutePath());
            }

//          list(new File("C:/Recovery"));

      }
      //递归循环,自己调用自己
      public static void list(File dirFile){
            File[] farray=dirFile.listFiles();
            for(File f: farray){
                  if(f.isFile()){
                        System.out.println(f.getAbsolutePath());

                  }else{
                        list(f);
                  }
            }
      }
      //递归循环,删除所有文件
      public static void delList(File dirFile){
            File[] farray=dirFile.listFiles();
            for(File f: farray){
                  if(f.isFile()){
                        f.delete();

                  }else{
                        delList(f);
                  }
            }
            dirFile.delete();
      }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容