输入和输出

JAVA的流分为输入流和输出流两部分,

输入流:InputStream或者Reader:从文件中读到程序中;

输出流:OutputStream或者Writer:从程序中输出到文件中;

Reader和Writer是字符流:只能针对字符文件进行读写操作。

InputStream和OutputStream是二进制流:所有的文件都可以进行读写操作。也就是可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。java.io.OutputStream:(抽象类),输出字节流 可以接收待输出的字节并将这些字节发送到某个接收器 。java.io.InputStream: (抽象类),输入字节流,可以将本输入流中的字节读取出来

InputStream和OutputStream

InputStream和OutputStream的部分子类:

字节流:FileInputStream和FileOutputStream

缓冲流:BufferedInputStream和BufferedOutputStream

数据流:DataInputStream和DataOutputStream

对象流:ObjectInputStream和ObjectOutputStream

1.FileInputStream和FileOutputStream的应用

FileInputStream是InputStream的子类 文件输入流,可以从文件系统中的某个文件中获得输入字节,把他输入到我们的程序中;

FileOutputStream 是OutputStream的子类,文件输出流, 可以从byte数组中接收数据并将数据写入某个文件。

FileInputStream类的使用:

简单地来说,FileInputStream流的使用,有6个步骤:

    • 根据path路径实例化一个输入流的对象,在该方法中会抛出一个文件找不到的时候的一个异常,所以我们在用的时候也要特别注意不要文件路径是否正确,以及文件是和存在;
		FileInputStream fis=null;
try {
// 根据path路径实例化一个输入流的对象
fis = new FileInputStream(path);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
    • 在数据流创建好之后,就可以获取在这个输入流中可以被读的剩下的byte字节的估计值
    • .然后根据我们获取的这个数据去创建一个byte数组
    • 在然后把我们要读取的数组读到数组中
    • 获取到byte数组之后,根据byte数组去创建一个string字符串;我们可以把这个字符串输出来检查我们是否获取到了数据
    • 要注意的是,在我们获取完数组之后,我们需要去关闭我们的FileInputStream对象;也就是把文件与程序之间的通道关闭;代码如下:
        /**
* 读取文件中的数据的方法;
* @param path要读取得文件的路径和文件全名;
* @return 返回读取到的文件中的字符串;
*/
// @SuppressWarnings("finally")
public String readFile(String path) {
                      // 实例化FileInputStream对象;
FileInputStream fis = null;
String str = null;
	try {
//
1.根据path路径实例化一个输入流的对象
fis = new FileInputStream(path);
//2. 返回这个输入流中可以被读的剩下的bytes字节的估计值;
int size = fis.available();
//3. 根据输入流中的字节数创建byte数组;
byte[] array = new byte[size];
fis.read(array);//4.把数据读取到数组中; //5.根据获取到的Byte数组新建一个字符串,然后输出;
str = new String(array);
System.out.println(str);//输出;
} catch (FileNotFoundException e) {
// 解决new FileInputStream(path);可能会发生的异常;
e.printStackTrace();
} catch (IOException e) {
// 解决fis.available()时可能发生的异常;
e.printStackTrace();
} finally {
//6.在最后,关闭我们的IO流
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return str;
}

FileOutputStream的使用:

    • 根据文件路径创建输出流
    • 把string转换为byte数组
    • 把byte数组输出
    • 关闭数据流;
          /**
* 将数据写入到文件中的方法;
* @param path要写入的文件的路径和文件全名;
* @param content 要从程序写入文件的字符串
*/
public void writeFile(String path, String content) {
FileOutputStream fos = null; try {
//1.根据文件路径创建输出流
fos = new FileOutputStream(path);
//2.把string转换为byte数组;
byte[] array = content.getBytes();
//3.把byte数组输出;
fos.write(array); } catch (FileNotFoundException e) {
// 解决new FileOutputStream(path)出现的问题
e.printStackTrace();
} catch (IOException e) {
// 解决fos.write(array)可能会出现的问题;
e.printStackTrace();
} finally {
/*
* 在方法的最后一定实现这个方法;
*/
try {//4.关闭IO流
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

JAVA之IO流(字节流)的更多相关文章

  1. Java之IO流(字节流,字符流)

    IO流和Properties IO流 IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键, 因而所有 I/O 的主体实际上是内置在操作系统中的.单独的 ...

  2. JAVA基础——IO流字节流

    在Java中把不同的输入输出源(键盘.文件.网路连接)抽象表述为“流”. 1.输入流.输出流 .字节输入流通过FileInputStream和来操作 字节输出流通过FileOutputStream来操 ...

  3. java 输入输出IO流 字节流| 字符流 的缓冲流:BufferedInputStream;BufferedOutputStream;BufferedReader(Reader in);BufferedWriter(Writer out)

    什么是缓冲流: 缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率. 图解: 1.字节缓冲流BufferedInputStr ...

  4. Java基础-IO流对象之字节流(Stream)

    Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...

  5. java的IO流,字节流和字符流

    java操作文件都是通过流来处理的,(其实其他很多语言也是这样) 第一:java的IO流,分为:输入流 和 输出流(这真是废话,这是从流向的角度来说的) 第二:java的所有IO流,只分为:字节流 和 ...

  6. Java基础IO流(二)字节流小案例

    JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...

  7. java的IO流

    java的IO流继承四大抽象类分别是字节流 inputStream outputStream与字符流 read write.怎么理解记忆很重要. 直接连接读写对象的是结点流,例如对文件读取字节类的名字 ...

  8. Java基础——IO流

    今天刚刚看完java的io流操作,把主要的脉络看了一遍,不能保证以后使用时都能得心应手,但是最起码用到时知道有这么一个功能可以实现,下面对学习进行一下简单的总结: IO流主要用于硬板.内存.键盘等处理 ...

  9. 【Java】IO流简单分辨

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827509.html Java的IO流体系十分庞大,并且体系层次稍复杂,很容易记混或记错.在此,我把平时经常用 ...

随机推荐

  1. MS SQL 排序规则总结

    排序规则术语        什么是排序规则呢? 排序规则是根据特定语言和区域设置标准指定对字符串数据进行排序和比较的规则.SQL Server 支持在单个数据库中存储具有不同排序规则的对象.MSDN解 ...

  2. 如何创建一个GitLab Web Hooks?

    Git Hooks Git 能在特定的重要动作发生时触发自定义的脚本. 这些脚本都被存储在 Git 目录下的 hooks 子目录中(.git/hooks).当 git init 初始化一个仓库时,Gi ...

  3. linux中通配符和常用特殊符号

    1 通配符   2 特殊符号 3 参考文档 鸟哥的私房菜 http://vbird.dic.ksu.edu.tw/linux_basic/0320bash_4.php#settings_wildcar ...

  4. ipv4理论知识3-分类编址之两级编址

    两级编制 分类编址时,同一网络中的所有地址都属于统一个地址块,而每个地址块包含两部分:网络标识和主机标识.网络标识指明了网络,主机标识则指明了连接到该网络的一台特定的主机.如下图描绘了分类编址中一个I ...

  5. 去掉windows8.1鸡肋的开始按钮

    无开始按钮了,win8.1的 开始按钮反而非常鸡肋.. 可以使用我分享的链接下载startisgone: http://download.csdn.net/detail/wangallan/89728 ...

  6. C#学习笔记-ContextMenuStrip

    ContextMenuStrip是就是所说的右键菜单,在VS里可以直接新建,挺方便.但是跟着师父看了很多代码,发现了好多时候都需要自己写这部分代码.这个部分目前为止我了解的还不是很多,更细致的就只有等 ...

  7. 解决:PADS导入.DXF结构图出现坐标超出范围问题

    现象: 原因: PCB尺寸是有限的,PADS中对于坐标大小有所限制,但AUTO CAD中的坐标却是无限制的. 解决方法: 1.在AUTO中使用M命令,将绘制的结构图移动至原点: 2.在AUTO中使用W ...

  8. 【2016-10-21】【坚持学习】【Day11】【.net 自带的三种委托】

    三种自带委托: Action Predicate Func Action: 无返回类型 Predicate 返回类型是bool类型 Func 自定义返回类型 Action:没有参数没有返回值 Acti ...

  9. HTTPS----安全超文本传输协议

    HTTPS协议详解HTTPS以保密为目标研发,简单讲是HTTP的安全版.其安全基础是SSL协议,因此加密的详细内容请看SSL.全称Hypertext Transfer Protocol over Se ...

  10. [普通平衡树splay]【学习笔记】

    参考: http://blog.csdn.net/clove_unique/article/details/50630280 gty课件 找一个好的风格太难了,自己习惯用struct,就强行用stru ...