相关文章:
  1. 《IO流 (一) ----- 基本概念和File类》
  2. 《IO流 (二) ----- 文件流》
  3. 《IO流 (三) ----- 字符流和字符缓冲流》
  4. 《IO流 (四) ----- 转换流和标准字节输出流》
  5. 《IO流 (五) ----- 对象数据的序列化和反序列化》

本篇涉及内容


  • FileInputStream详解

  • FileOutputStream详解

  • FileInputStream和FileOutputStream结合使用实现文件拷贝

文件字节输入流FileInputStream详解


一、关于文件字节输入流FileInputStream的基本内容
  1. 能实现的效果:通过该流可以读取硬盘中的文件数据到内存中来。

  2. 创建并且关闭一个文件字节输入流的完整过程

     public static void main(String[] args) {FileInputStream fis = null;try {// 绝对路径可以写为:"C:/Users\yukea/Desktop/JavaProject/Test/FileInputStreamTest.txt",也可以用相对路径fis = new FileInputStream("C:\\Users\yukea\\Desktop\\JavaProject\\Test\FileInputStreamTest.txt");} catch (FileNotFoundException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
    
二、FileInputStream的常用方法
  1. 使用int read()读取文件中的数据——返回读取到的字节本身

    try {//.txt文件中存储了abc三个字符,在windows中占用3个字节空间fis = new FileInputStream("C:\\ProgramData\\Test\\FileInputStreamTest.txt");fis.read();// 返回97fis.read();// 返回98fis.read();// 返回99fis.read();// 返回-1}
    

    原理:有一个指针会随着Read()方法的调用而前移,首次调用Read()方法时指针前移指向.txt文件中的第一个字节,调用完后返回该字节数,后面每调用一次Read()方法则指针向后移动一位并且返回对应的字节数,直到指针指向文件末尾时返回-1。

  2. 使用int read(byte[] b)读取文件中的数据——返回读取到的字节数量

    try {//.txt文件中存储了abcdef五个个字符fis = new FileInputStream("C:\\ProgramData\\Test\\FileInputStreamTest.txt");byte[] bytes = new byte[4];fis.read(bytes);// 返回4,读取到了4个字节到bytes数组中System.out.println(new String(bytes));// 打印 "abcd" 字符串fis.read(bytes);// 返回2,读取到了2个字节到bytes数组中System.out.println(new String(bytes));// 打印 "efcd" 字符串fis.read(bytes);// 返回-1,没有读取到其他字节}
    

    原理:每次最多读取bytes数组长度的字节。
    第一次读取:{97, 98 ,99 ,100} 4个字节保存到了字节数组中,返回读取到的字节数量4
    第二次读取:{101, 102, 99, 100} 文件中的后两个字节覆盖到了字节数组中,返回读取到的字节数量2
    第三次读取:返回-1,因为已读取到文件末尾

  3. int read(byte[] b)结合String构造方法使用——读取多少字节转换为多长字符串

       try {//.txt文件中存储了abcdef五个个字符fis = new FileInputStream("C:\\ProgramData\\Test\\FileInputStreamTest.txt");byte[] bytes = new byte[4];int readCount = 0;readCount = fis.read(bytes);// 返回4,读取到了4个字节到bytes数组中System.out.println(new String(bytes, 0, readCount));// 打印 "abcd" 字符串readCount = fis.read(bytes);// 返回2,读取到了2个字节到bytes数组中System.out.println(new String(bytes, 0, readCount));// 打印 "ef" 字符串}
    
  4. int available()——返回文件中剩余的没有读取到的字节数量

  5. long skip(long n)——跳过几个字节不读取

  6. int available()配合int read(byte[] b)——不使用循环,一次性读取完文本中的字节。

    try {fis = new FileInputStream("Test/FileInputStreamTest.txt");// 创建一个长度恰好为文本字节数量的bytes数组byte[] bytes = new byte[fis.available()];// 把文件中的字节读取到bytes数组中fis.read(bytes);// bytes数组转为字符串String s = new String(bytes);System.out.println(s);// 输出"莫莫你好hello"}
    
三、从硬盘上读取一个.txt文件内容到内存中的流程
  1. 先创建一个.txt文件

  2. 代码实现——将文件内容保存到一个String字符串上

         FileInputStream fis = null;try {fis = new FileInputStream("Test/FileInputStreamTest.txt");byte[] bytes = new byte[12];int readCount = 0;StringBuffer sb = new StringBuffer(10);while ((readCount = fis.read(bytes)) != -1) {String s = new String(bytes, 0, readCount);sb.append(s);}System.out.println(sb);// 打印 "莫莫你好hello"} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}
    

文件字节输出流FileOutputStream详解


一、关于文件字节输出流FileOutputStream的基本内容
  1. 能实现的效果:通过该流可以将内存中的数据写入到硬盘数据文件中去。

  2. 创建并且关闭一个文件字节输出流的完整过程

    try {// 如果文件不存在则会自动新建一个文件fos = new FileOutputStream("Test/FileOutputStreamTest.txt");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}
    
二、FileOutputSream的常用方法
  1. 将指定字节数组中的字节写到流中的方法
    (1) void write(byte[] b)
    (2) void write(byte[] b, int off, int len)

    try {fos = new FileOutputStream("Test/FileOutputStreamTest.txt");byte[] bytes = {97, 98, 99, 100};fos.write(bytes);// 将数组中的全部字符写入fos.write(bytes, 0, 2);// 将数组中从下标0开始写入2个长度的字节(接着上面写入的字节后面)// 写完后一定要刷新!fos.flush();// 刷新后该文本文件中出现abcdab}
    

    注意:使用上述方法将字节写入文件,写入之前会先清空文件的内容再进行写入。
    以追加的方式写入:fos = new FileOutputStream("Test/FileOutputStreamTest.txt", ture);

  2. 配合String类的byte[] getBytes()方法使用——将字符串转换为字节数组,向文件中写入字符串

            try {FileOutputStream fos = new FileOutputStream("Test/FileOutputStreamTest.txt");String s = "莫莫大包子";fos.write(s.getBytes());fos.flush();}
    

FileInputStream和FileOutputStream的结合使用实现文件拷贝


        String originFilePath = "/Users/apple/Downloads/FinalVideo_1591626463.139785.MOV";String targetFilePath = "Test/copyFile/copiedFile2.MOV";FileInputStream fis = null;FileOutputStream fos = null;try {fis = new FileInputStream(originFilePath);fos = new FileOutputStream(targetFilePath);// 一次读取1MB byte[] bytes = new byte[1024 * 1024];int readCount = 0;// 读取多少写入多少while ((readCount = fis.read(bytes)) != -1) {fos.write(bytes, 0, readCount);}fos.flush();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}if (fos != null) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}}

IO流 (二) ----- 文件流相关推荐

  1. C++ 流的操作 | 初识IO类、文件流、string流的使用

    文章目录 前言 IO头文件 iostream fstream sstream 流的使用 不能拷贝或对 IO对象 赋值 条件状态与 iostate 类型 输出缓冲区 文件流 fstream类型 文件模式 ...

  2. java流与文件——流

    [0]README 0.1) 本文描述转自 core java volume 2, 旨在理解 java流与文件--流 的相关知识: 0.2) 输入流和输出流(InputStream 和 OutputS ...

  3. php接收流文件,PHP传输文件流及文件流的保存

    什么是文件流 在HTTP数据传送过程中,传输一方直接以二进制流方式传送文件内容,这样就形成了一个文件流: 文件流的接收通常涉及到预定义变量函数 $HTTP_RAW_POST_DATA 和 file_g ...

  4. Linux C: IO库函数,文件流缓冲,变参函数

    一.I/O 库函数与系统调用 在Linux 中有很多关于IO(输入输出)的库函数,其大部分都存在 stdio.h 头文件中.例如fopen,fread,fwrite,fseek,fclose , 这些 ...

  5. Java IO流之【缓冲流和文件流复制文件对比】

    与文件流相比,缓冲流复制文件更快 代码: package Homework;import java.io.BufferedOutputStream; import java.io.File; impo ...

  6. Java IO流之文件流

    一.文件流分类 二.FileInputStream 三.FileOutputStream 四.FileReader 五.FileWriter 六.文件流应用 1,复制或剪切文件 2,读取文件信息 应用 ...

  7. .NET中的IO操作之文件流

    读操作 //1.创建文件流 FileStream fsRead =new FileStream("1.txt",FileMode.Open); //2.创建缓冲区,正常情况下,是不 ...

  8. C++ IO类(3) 文件流

    我们可以通过文件流来控制文件的输入以及输出: fstream: 创建一个未绑定的文件流 fstream fstrm("file.txt")  创建一个fstream,并打开名为s的 ...

  9. .net 流(Stream) - 文件流、内存流、网络流

    一.文件流 FileStream FileStream流继承与Stream类,一个FileStream类的实例实际上代表一个文件流,使用FileStream类可以对文件系统上是文件进行读取.写入.打开 ...

最新文章

  1. 这个AI让马斯克头秃,还能帮他设计特斯拉
  2. Spring Security 实战:基于配置的接口角色访问控制
  3. 全球规模最大的全浸没式液冷数据中心落户杭州余杭
  4. 突然被工信部重罚!阿里云到底干了啥?
  5. Git笔记(21) 分布式工作流程
  6. 澎思科技获洪泰基金千万级天使轮融资,深耕AI+安防行业
  7. javascript 为对象中的二级元素赋值 1006 Uncaught TypeError: Cannot set property ‘‘ of undefined
  8. IEEE 浮点数编码规则
  9. 思科模拟器静态路由设置,以及rip路由设置
  10. gmp新附录 计算机系统,GMP新附录:计算机系统.doc
  11. Matlab 工作区变量和 MAT 文件
  12. Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar
  13. python 中sample是什么_python中的sample什么意思
  14. template用法
  15. 有关《家》的经典歌曲_浅谈艺术歌曲《家》的演唱
  16. 世界上最有名和哲理的17句话
  17. 請問下需要一套繁體字多商戶商城+跑腿外賣系統
  18. 郭平欣老先生在恢复中
  19. 注册商标的流程及费用是怎样的?
  20. mysql重启数据库实例命令_mysql重启数据库实例命令

热门文章

  1. .NET回归 HTML----超文本标记语言(暂时无图)
  2. 【理解】 Error 10053和 Error 10054
  3. C#学习笔记-ContextMenuStrip
  4. 文件和目录:access函数
  5. Ubuntu 10.10安装Vmware Tools
  6. 《设计模式详解》创建型模式 - 建造者模式
  7. 【Java从0到架构师】Redis 进阶 - pipline、发布订阅、Bitmap、HyperLogLog、GEO
  8. 初探C语言指针之何为指针变量
  9. [转]Hexo博客插入自定义不渲染页面
  10. 数据湖就是坑人的新概念?那些挖坑的企业,后来都怎么样了