Java.IO

Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。

Java.IO流的分类

  • 字节流:数据流中的最小的数据单元是字节,一次读入读出8位二进制;
  • 字符流:数据流中的最小的数据单元是字符,一次读入读出16位二进制,java中的字符是Unicode编码,一个字符占用两个字节。

字节流

inputStream类(输入字节流)

inputstream类:inputStream类是个抽象类,是所有字节输出流的超类。们可以认为InputStream提供了一种统一的对待输入的方法,可将多种不同类型的数据源都用统一的读取方式对待。要说明的是,InputStream是用来操控字节输入流的,它所提供的方法也是针对字节的

inputStream类的常用子类:

InputStream子类           数据源类型
ByteArrayInputStream     包含一个内存缓冲区,字节从中取出。
FileInputStream          从文件中获得字节。
ObjectInputStream        用来恢复被序列化的对象。
PipedInputStream         管道输入流,读取管道内容。多和PipedOutputStream一起用于多线程通信。
SequenceInputStream      是多种输入流的逻辑串联,从第一个输入流读取,直到最后一个输入流。
StringBufferInputStream  读取的字节由字符串提供。
FileInputStream类
创建一个FileInputStream类的对象用来获取src目录下的a.txt文件
    /*** 使用InputStream抽象类的子类FileInputStream类 从一个文件夹中读取数据流* (FilterInputStream的方法与InputStream中的方法没什么不同。* 但FilterInputStream的子类却给出了更多的实现。)*/public static void test1() {try {// 读取src下的a.txt文件FileInputStream is = new FileInputStream("src/a.txt");int a = 0;// 如果没读到文件尾,则继续执行读取命令while ((a = is.read()) != -1) {// 因为是a里面装的都是字节// 所以要转换为char类型System.out.print((char) a);}// 关闭流(使用完都要关闭)is.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

运行结果:

InputStream提供了以下方法:

 方法                 解释available()         返回此输入流下一个方法可以读取的字节数。close()             关闭此输入流并释放相应资源。mark(int)           在此输入流中标记当前的位置。markSupported()     测试此输入流是否支持mark和reset方法。read()              从此输入流中读取下一个字节(此方法是抽象方法,子类必须实现该方法)。read(byte[])        从输入流中读取一定数量的字节,存储在参数指定的字节数组中。read(byte[],int,int)从输入流中指定位置起读取若干字节存储在指定字节数组中。reset()             将此输入流定位到最后一次mark的位置。skip(long)          跳过和丢弃此输入流中数据的若干字节。

OutputStream类(输出字节流)

OuputStream类:OutputStream与InputStream一样,都是抽象类,是输出字节流的所有类的超类。它的作用是接收输出字节并将这些字节输送到某个接收的地方。

OutputStream的子类分为以下几种:

OutputStream子类           解释
ByteArrayOutputStream     该类实现了一个输出流,其数据被写入由byte数组充当的缓冲区,缓冲区会随着数据的不断写入而自动增长。
FileOutputStream          该类实现了一个输出流,其数据写入文件。
ObjectOutputStream        该类将实现了序列化的对象序列化后写入指定地方。
PipedOutputStream         管道的输出流,是管道的发送端
FileOutputStream类
使用FileOutputStream类将一个字符写到src目录下的b.txt文件中
    /*** 使用FileOutputStream类将一个字符写到文件中*/public static void test2() {try {//将os里面的内容输出到src的b.txt文件中OutputStream os = new FileOutputStream("src/b.txt");//将字节写入os输出流中os.write(97);//刷新缓存os.flush();//关闭输出流os.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} }

输出结果

使用FileOutputStream类将一个字符串写到文件中
    /*** 使用FileOutputStream类将一个字符串写到文件中*/public static void test3() {String content = "I'm a programmer";try {OutputStream os = new FileOutputStream("src/c.txt");os.write(content.getBytes());os.flush();os.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

运行结果

OutputStream的主要方法有:

方法                       解释
close()                   关闭此输出流并释放相应资源
flush()                   刷新此输出流并强制写出所有缓冲的输出字节。
write(byte[])             将字节写入此输出流。
write(byte[],int,int)    将指定的若干字节写入此输出流。
write(int)                将指定若干字节写入此输出流。

字符流

Reader类(输入字符流)

Reader类:用于读取字符流的抽象类。
使用Read类读取src目录下的d.txt文件内容
    /*** 使用Reader类读取文件内容*/public static void test4() {FileInputStream fis;try {fis = new FileInputStream("src/d.txt");Reader reader = new InputStreamReader(fis,"utf-8");int a ;while ((a=reader.read())!=-1) {System.out.print((char)a);}fis.close();reader.close();}catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

读取结果

Writer类(输出字符流)

writer类:写入字符流的抽象类。
使用Writer类将内容写入文件
    /*** 使用Writer类将内容写入src目录下的e.txt文件*/public static void test5() {FileOutputStream fos;try {fos = new FileOutputStream("src/e.txt",true);//加了true属性,则是追加写入Writer writer = new OutputStreamWriter(fos,"GBK");writer.write("I'm 漂亮女孩---");writer.flush();fos.close();writer.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

写入3次的结果

Scanner类

使用Scanner读取文件
    /*** Scanner 类使读取文件更为简单* 使用Scanner(File source) 构造一个新的Scanner,它生成的值是从指定文件扫描的*/public static void  test6() {try {FileInputStream fis = new FileInputStream("src/f.txt");Scanner scanner = new Scanner(fis);while (scanner.hasNextLine()) {System.out.println(scanner.nextLine());}fis.close();scanner.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}

读取结果

printWriter类

使用printWriter将内容写入文件中
    /***为了能够输出数据的时候更方便,我们要引入printWriter*/public static void test7() {try {PrintWriter pw = new PrintWriter("src/g.txt");pw.print("I am 零度! 我");pw.flush();pw.close();} catch (FileNotFoundException e) {e.printStackTrace();}}

写入结果

Java中的IO流修改相关推荐

  1. Java中的IO流(六)

    上一篇<Java中的IO流(五)>把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...

  2. 猿创征文|Java中的IO流大家族 (两万字详解)

    目录 IO流 概述 分类 四大家族 需要掌握的16个流 文件专属 FileInputstream(读 字节) FileInputStream类的其他常用方法 FileOutputStream (写 字 ...

  3. java io流分为,Java中的IO流按照传输数据不同,可分为和

    Java中的IO流按照传输数据不同,可分为和 答:字节流 字符流 克里斯蒂安 · 麦茨指出:想象的能指就是电影的能指,作为象征的科学,在第三视野范围内的解读,它是( ) 答:建立在共同的永久的背景之中 ...

  4. java中的IO流(超全)(超详解)结合实例轻松掌握

    java进阶之IO流 IO流的概念(大纲): 1.InputStream和OutputStream的继承关系图 2.Reader和Writer的继承关系图 3.文件专属流(加※为重点掌握) ※File ...

  5. Java中的IO流与Properties

    IO流 1 File 1.1 File类概述和构造方法 File:它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一 ...

  6. Java中的IO流(最详细解说)

    IO流 一.File类的使用 1.常用构造器 2.路径分隔符 3.常用方法 二.IO流原理 Java IO原理 三.流的分类 1.输入流 (1)InputStream & Reader (2) ...

  7. java中关于IO流的知识总结(重点介绍文件流的使用)

    今天做软件构造实验一的时候,用到了java文件流的使用,因为之前学的不是很踏实,于是决定今天好好总结一下, 也方便以后的回顾. 首先,要分清IO流中的一些基础划分: 按照数据流的方向不同可以分为:输入 ...

  8. io流技术java_技术文章-java中的IO流

    1.File类 Java中对文件有操作时,可以实例化一个File对象,将文件路径利用这样的形式赋给File对象. File f = new File(filePath); File类的基本操作包括: ...

  9. java中的IO流之序列化与反序列化(对象数据和文件的读写交互)

    前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客 一.知识点介绍 1.什么是序列化与反序列化? 对象与磁盘的交互读写. 2.为什么要学? 2.1在之前的IO流中,都是内存与磁盘进行交互的读 ...

最新文章

  1. 实现计算机界“大满贯”,芮勇博士再获技术成就大奖
  2. crontab 各参数详解及如何查看日志记录
  3. hdu4966 最小树形图(最少辅导花费)
  4. HDU 1430 关系映射 + 打表 .
  5. Leetcode 844. 比较含退格的字符串 解题思路及C++实现
  6. suse docker 安装mysql_Docker(三):Docker安装MySQL
  7. mysql数据库读取软件_sql数据库读取软件
  8. Mac小知识——MAC电脑如何查看IP
  9. 前端视频分片上传(blob)vue react uni 均适用
  10. 3dmax如何建模(二)
  11. 爸爸是个计算机工程师,作文:我的爸爸是工程师
  12. 微信屏蔽跳去App Store链接的解决方法
  13. 基于Java的vtt转txt程序
  14. python统计中文字符_使用 Python 统计中文字符的数量
  15. 科学道德与学术诚信 计算机,关于开展2020级研究生科学道德和学术诚信教育工作的通知...
  16. 戴尔 服务器重装后蓝屏,dell笔记本不能重装系统,一直进入蓝屏界面?
  17. echarts 修改地图经纬度
  18. 会计 复式记账 财务会计 系统设计 数据库建模(待翻译)
  19. 对于一颗给定的二叉树,输出所有从根节点到叶节点的路径
  20. android 除法运算保留小数点

热门文章

  1. easybuy源码_EasyBuy111
  2. java面向对象(核心技术)
  3. 台式计算机有乱码如何解决,台式机键盘乱码怎么办
  4. C语言3:根据身份证号输出生年月日和性别
  5. MATLAB-----对数与指数的表示
  6. 值得收藏的35+ 免费Javascript /Flash相册
  7. 鼠标点击,移动回放效果
  8. 九州云出席全球人工智能开发者先锋大会,圆桌论道开源未来
  9. 朋友今天问俺,日文输入法无法打出日语汉字?
  10. 空间站上的可充气住所——由NASA和比奇洛发起的计划