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

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

 

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

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
, 字节流操作
java字符流文件
java按字节截取字符串、java 字节流 字符流、java字符串转字节数组、java字节流和字符流、java 字节转字符,以便于您获取更多的相关知识。

时间: 2024-09-02 09:07:23

Java字符流和字节流对文件操作的区别_java的相关文章

Java字符流与字节流区别与用法分析_java

本文实例讲述了Java字符流与字节流区别与用法.分享给大家供大家参考,具体如下: 字节流与字符流主要的区别是他们的的处理方式 流分类: 1.Java的字节流 InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先. 2.Java的字符流 Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先. InputStream,OutputStream,Reader,writer都是抽象类.所以不能直接new 字节流是最基本的,所有的Inpu

在学Java,以字符流read一个txt文件,文件里写的是中文,控制台显示的乱码,大牛看下,谢谢

问题描述 在学Java,以字符流read一个txt文件,文件里写的是中文,控制台显示的乱码,大牛看下,谢谢 试了下,txt文件是英文的话不乱码,但是是中文的话就会出现乱码. public class test { public static void main(String[] args){ readFile(); //System.out.println(""); } public static void readFile(){ try { File file=new File(&q

字节流 字符流- 字符流 比 字节流 效率高?

问题描述 字符流 比 字节流 效率高? java老师说操作文件的时候,如果文件是文本的就用 字符流,因为 字符流 操作文本效率高. 可是 字符流 也是基于 字节流 实现的呀! 我也做过试验,copy一个文本文件,结果是字节流的速度快.... 而且 字节流 读取速度快慢取决于每次读取的字节数组大小,这样说来 字符流 完全没优势呀! 小弟java新手,问题可能有点浅薄,忘各路大虾百忙中解答下下,谢谢. 解决方案 package io;import java.io.FileInputStream;im

java中的Io(input与output)操作总结(一)_java

所谓IO,也就是Input与Output的缩写.在java中,IO涉及的范围比较大,这里主要讨论针对文件内容的读写 其他知识点将放置后续章节(我想,文章太长了,谁都没耐心翻到最后) 对于文件内容的操作主要分为两大类 分别是: 字符流 字节流 其中,字符流有两个抽象类:Writer Reader 其对应子类FileWriter和FileReader可实现文件的读写操作 BufferedWriter和BufferedReader能够提供缓冲区功能,用以提高效率 同样,字节流也有两个抽象类:Input

java字符流

网上有很多地方说inputStreamReader和outStreamWriter.BufferedReader和BufferedWriter都是字符流.不过也有地方说inputStreamReader和outStreamWriter只是转换流,实现字节流到字符流的转换. 而在我看来,两种说法都有道理,如果一定要分个高下的话,那就更加趋向于认同前一种. 因为只要和FileInputStream做一个简单的比较就可以知道inputSteamReader是按字符读取的,而FileInputStrea

Java I/O技术之文件操作详解_java

在java程序设计中,I/O操作是通过java.io包中的类和接口来实现的,因此,我们第一步要做的就是import这个包. java.io提供了一个File类,这是类很容易让人产生误会,它表示的是一个文件名或者目录名,而不是文件本身,所以通过这个类没法对文件里面的数据进行操作.File类提供了一序列对文件操作的功能:删除文件,创建目录,查询文件大小等等.要想对文件数据进行操作那就需要流对象了,在这里就暂时不做介绍. 下面通过一个叫做FileExtension类来对File类中的各种操作进行封装,

java字符流处理之while readline

BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象 String str  = null;br=new BufferedReader(new FileReader(fileName));do{  str

java开发之读写txt文件操作的实现_java

项目结构: 开发之读写txt文件操作的实现_java-java实现读写分离"> 运行效果: ======================================================== 下面是代码部分: ======================================================== /Text/src/com/b510/txt/MyFile.java 复制代码 代码如下: package com.b510.txt;  import ja

java 字符流-java 封装流关闭的疑问

问题描述 java 封装流关闭的疑问 BufferedWriter writer = null; try { writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8")); writer.write(" " + context); writer.flush(); logger.debug("写文件成功,[filePath="