Java字符流和字节流对文件操作的区别

作者:Dreamlove 时间:2022-06-08 10:32:01 

记得当初自己刚开始学习Java的时候,对Java的IO流这一块特别不明白,所以写了这篇随笔希望能对刚开始学习Java的人有所帮助,也方便以后自己查询。Java的IO流分为字符流(Reader,Writer)和字节流(InputStream,OutputStream),字节流顾名思义字节流就是将文件的内容读取到字节数组,然后再输出到另一个文件中。而字符流操作的最小单位则是字符。可以先看一下IO流的概述:

 Java字符流和字节流对文件操作的区别

下面首先是通过字符流对文件进行读取和写入:


package lib;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class Test {
 // 定义文件路径
 File f = new File("F:\\test.txt");
 //字符流写入的方法
 public String writeInFile() throws IOException{
   String str = "";
   String count = "";
   try {
     // 使用字符流对文件进行读取
     BufferedReader bf = new BufferedReader(new FileReader(f));
     while (true) {
       //读取每一行数据并将其赋值给str
       if ((count = bf.readLine()) != null) {
         str += count;
       } else {
         break;
       }
     }
     // 关闭流
     bf.close();
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   }
   return str;
 }
 //字符流读取的方法
 public void getReader(){
   try {
     //其中true表示在原本文件内容的尾部添加,若不写则表示清空文件后再添加内容
     PrintWriter pw=new PrintWriter(new FileWriter(f,true));
     pw.write("测试输入字符串到文件中2");
     pw.close();
   } catch (IOException e) {
     e.printStackTrace();
   }
 }
 public static void main(String[] args) throws IOException {
   Test test=new Test();
   //将字符串输入到文件中
   test.getReader();
   //读取相对应的字符串
   String str=test.writeInFile();
   //将文件中内容在控制台输出
   System.out.println("文件内容为:"+str);
 }
}

上述代码的关键地方都有注释,就不再一一赘述了,主要就是在使用完流之后不要忘记关闭就好

然后是通过字节流的方式对文件进行操作,将一个文件中的内容复制到另一个文件中:


package com.file.test2;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestFile2 {
 //使用字节流读取并写入文件,将一个文件复制到另一个文件中
 public static void main(String[] args) throws IOException {
   //要复制的源文件
   File f=new File("D:\\test.txt");
   //目标文件
   File f2=new File("D:\\test2.txt");
   //定义一个byte类型的数组,用于存储读取到的内容
   byte [] b=new byte[1024];
   int length;
   try {
     //定义读取的流
     FileInputStream in=new FileInputStream(f);
     //定义输出到文件的流
     FileOutputStream out=new FileOutputStream(f2);
     //将文件内容输出到另一个文件中
     while((length=in.read(b))!=-1){
       out.write(b, 0, length);
     }
     out.close();
     in.close();
   } catch (FileNotFoundException e) {
     e.printStackTrace();
   }
 }
}

在字节流的操作中,第13行的源文件必须存在,可以根据需要自行更改文件路径,只需要存在即可,否则会报文件找不到的错误,同时若想在控制台输出读取到的字节流的内容则可以在第27和28行之间加两句代码:in.read(b, 0, b.length);System.out.println(new String(b));

标签:java,字节流,字符流
0
投稿

猜你喜欢

  • .net的序列化与反序列化实例

    2022-12-29 00:50:50
  • 详解Java利用深度优先遍历解决迷宫问题

    2022-08-20 02:46:54
  • Idea防沉迷插件StopCoding的安装使用教程

    2023-11-23 07:29:32
  • @Value如何获取yml和properties配置参数

    2021-12-12 13:24:01
  • Android mvvm之LiveData原理案例详解

    2023-09-29 11:49:26
  • Java 实战项目之疫情人员流动管理系统详解

    2022-08-04 19:30:57
  • springboot配置项目启动后自动打开浏览器访问项目方式

    2023-10-05 07:33:09
  • Android RecyclerView显示Item布局不一致解决办法

    2023-04-25 06:50:32
  • SpringBoot自动配置深入探究实现原理

    2023-08-06 09:59:58
  • java8中的默认垃圾回收器(GC)

    2021-12-01 04:27:30
  • implicit关键字做自定义类型隐式转换的方法

    2021-10-22 20:00:40
  • android桌面悬浮窗显示录屏时间控制效果

    2022-04-21 14:54:12
  • Android定时器和Handler用法实例分析

    2022-11-09 22:18:08
  • java数据结构与算法数组模拟队列示例详解

    2021-07-23 16:50:24
  • 图形学之Unity渲染管线流程分析

    2023-09-25 05:27:36
  • Java如何实现树的同构?

    2023-11-28 09:55:19
  • 浅析java 归并排序算法

    2022-01-20 09:59:50
  • Android 调用发送短信的方法

    2023-05-30 22:56:40
  • Android自带emoji表情的使用方法详解

    2021-11-25 09:28:22
  • Android实现图片添加阴影效果的2种方法

    2022-10-31 06:46:55
  • asp之家 软件编程 m.aspxhome.com