Java 基础: IO流 -- 字节流和字符流的区别和使用,分别实现文本的复制(详细)

前置知识: File 类的基本使用与了解。

流:

在介绍 IO 流之前先来说下什么是流: 流是一种 FIFO 的数据结构(类似于队列,先进先出)。简单来说,就像水流一样。

输入流和输出流:

输入流和输出流是相对于 内存 这个参照物来说的。
在这里插入图片描述

流的划分:

在这里插入图片描述
上图中很多类都是抽象类,所以都需要通过其子类进行实现
(父类引用指向子类对象 – 多态)
注意:
1、字节流:字节流就是将内容转为了字节形式进行传输, 1 字节 有 8 个二进制位组成,在底层,文件都是有二进制组成的,所以二进制可以传输任何类型的数据,进而 字节流也可以传输任何类型的数据。
2、字节流是 8 位通用字节流(可以处理任意类型,处理文本以外的其他文件)
3、字符流是 16 位 unicode 字符流(只用于处理字符,处理文本文件)
4、字符流:一般只用来处理字符,当我们传输图片的时候,转码的时候容易出现乱码,字节流也可以处理字符相关的文本,但是效率没有字符流更好。

输入流实现文本的读取:

在流到内存的时候因为我们不知道文件的具体大小,也就是字节数组的大小开多少比较合适
我们是不知道的,所以需要通过 in.available() 方法得到文件的大小,进而实现流动。

package io;

import java.io.*;

public class Demo03 {

<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span>
    <span class="token comment">// 提高作用域,便于关闭</span>
    InputStream in <span class="token operator">=</span> null<span class="token punctuation">;</span>
    <span class="token keyword">try</span><span class="token punctuation">{<!-- --></span>
        <span class="token comment">// InputStream 是一个抽象类,需要通过子类进行实现</span>
        in <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileInputStream</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"hello.txt"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">// 得到文件的总大小</span>
        System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>in<span class="token punctuation">.</span><span class="token function">available</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">// 先将文件放到缓冲区里面,这里的缓冲区是一个 字节数组</span>
        <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> buf <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">byte</span><span class="token punctuation">[</span>in<span class="token punctuation">.</span><span class="token function">available</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">;</span>

        <span class="token comment">// 流到内存中</span>
        in<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>buf<span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">// 输出一下</span>
        System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">(</span>buf<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">FileNotFoundException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">finally</span> <span class="token punctuation">{<!-- --></span>
        <span class="token comment">// 防止出现空指针</span>
        <span class="token keyword">if</span><span class="token punctuation">(</span>in <span class="token operator">!=</span> null<span class="token punctuation">)</span> in<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

hello.txt 文本中的内容:
在这里插入图片描述
输出结果;
在这里插入图片描述

输出流实现将内容输出到文件中:

package io;

import java.io.*;

public class Demo04 {

<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{<!-- --></span>
    OutputStream out <span class="token operator">=</span> null<span class="token punctuation">;</span>
    <span class="token keyword">try</span> <span class="token punctuation">{<!-- --></span>
        <span class="token comment">// 与 输入流类似</span>
        out <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"d.txt"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">// 通过子节的方式将 hello123 读取到 d.txt 文件中</span>
        out<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span><span class="token string">"hello123"</span><span class="token punctuation">.</span><span class="token function">getBytes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">FileNotFoundException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">finally</span> <span class="token punctuation">{<!-- --></span>
       <span class="token keyword">if</span><span class="token punctuation">(</span>out <span class="token operator">!=</span> null<span class="token punctuation">)</span> out<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span>

<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

d.txt
在这里插入图片描述

字节流实现文件的复制:

在实现文件的复制时,需要注意以下几点:
1、由于文件可能很大,可能有几个G,但是我们不可能一次开辟那么大的空间,所以可以分块进行流动,每次开辟一定的空间。
2、分块流动时可能会有多出来的一部分: 比如 135 byte,我们规定每次最多只能传输 10 byte,但是 最后会 只剩下 5 byte 还没有传输,这个时候缓冲区里面存储的还是上一次的 10byte,而新来的 5byte 只会替换前 5 个:如下图:
原文件:
在这里插入图片描述
复制后的文件:
在这里插入图片描述
可以清晰的看到,复制后的文件与原文件中的内容出现不一致,这个问题该怎么处理呢?
详见代码:



 
 
  • 1

3、一定要记得关闭 输入流和输出流,否则会出现文件内容读不进去的尴尬

package io;

import java.io.*;

public class Demo05 {

<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>

    InputStream in <span class="token operator">=</span> null<span class="token punctuation">;</span>
    OutputStream out <span class="token operator">=</span> null<span class="token punctuation">;</span>

    <span class="token keyword">try</span><span class="token punctuation">{<!-- --></span>
        <span class="token comment">// 将原文件读到内存区</span>
        in <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileInputStream</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"a.txt"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">// 从 内存区 输出到 要复制的地方</span>
        out <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileOutputStream</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"b.txt"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">// 缓存区(每次都流动 10 byte)</span>
        <span class="token keyword">byte</span><span class="token punctuation">[</span><span class="token punctuation">]</span> buf <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">byte</span><span class="token punctuation">[</span><span class="token number">10</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
        <span class="token keyword">int</span> len <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
        <span class="token comment">// in.read(buf) 返回值是流动到 内存区的 长度</span>
        <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token punctuation">(</span>len <span class="token operator">=</span> in<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>buf<span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token operator">!=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            <span class="token comment">// 每次都流动的是 实际 的长度(这样可以避免出现文件不一致的情况)</span>
            out<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>buf<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span>len<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

    <span class="token punctuation">}</span><span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">FileNotFoundException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">finally</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">try</span> <span class="token punctuation">{<!-- --></span>
            <span class="token comment">// 一定要记得关 流</span>
            <span class="token keyword">if</span><span class="token punctuation">(</span>out <span class="token operator">!=</span> null<span class="token punctuation">)</span> out<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token keyword">if</span><span class="token punctuation">(</span>in <span class="token operator">!=</span> null<span class="token punctuation">)</span> in<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

    <span class="token punctuation">}</span>

<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

字符流实现文件的复制:

实现功能:
在这里插入图片描述
将a.txt文件中的内容 复制到 b.txt 文件中,并且将占位符替换掉。

package io;

import java.io.*;

public class Demo06 {

<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    Reader in <span class="token operator">=</span> null<span class="token punctuation">;</span>
    Writer out <span class="token operator">=</span> null<span class="token punctuation">;</span>
    <span class="token keyword">try</span> <span class="token punctuation">{<!-- --></span>

        <span class="token comment">// 字符输入流</span>
        in <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileReader</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"a.txt"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">// 字符输出流</span>
        out <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">FileWriter</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">File</span><span class="token punctuation">(</span><span class="token string">"b.txt"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">// 字节流是 字节数组作为缓冲区,字符流是 字符数组作为缓冲区</span>
        <span class="token keyword">char</span><span class="token punctuation">[</span><span class="token punctuation">]</span> buf <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">char</span><span class="token punctuation">[</span><span class="token number">4</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
        <span class="token comment">// 拼接字符串,由于 Sting 每次拼接时都要在 常量池中开辟新的空间,效率较低,所以我们选择用 StringBuffer</span>
        StringBuffer sb <span class="token operator">=</span> <span class="token keyword">new</span>  <span class="token class-name">StringBuffer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token keyword">int</span> len <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>

        <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token punctuation">(</span>len <span class="token operator">=</span> in<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span>buf<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">!=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            sb<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>buf<span class="token punctuation">,</span><span class="token number">0</span><span class="token punctuation">,</span>len<span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

        System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>sb<span class="token punctuation">)</span><span class="token punctuation">;</span>

        <span class="token comment">// 转换为 String 类型,替换相应的内容</span>
        String content <span class="token operator">=</span> sb<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        content <span class="token operator">=</span> content<span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">,</span><span class="token string">"潘小蓝"</span><span class="token punctuation">)</span>
                  <span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">,</span><span class="token string">"22"</span><span class="token punctuation">)</span>
                  <span class="token punctuation">.</span><span class="token function">replace</span><span class="token punctuation">(</span><span class="token string">"address"</span><span class="token punctuation">,</span><span class="token string">"HN"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token comment">// 输出到 相应文件中</span>
        out<span class="token punctuation">.</span><span class="token function">write</span><span class="token punctuation">(</span>content<span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">FileNotFoundException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">finally</span> <span class="token punctuation">{<!-- --></span>

        <span class="token keyword">try</span> <span class="token punctuation">{<!-- --></span>
           <span class="token keyword">if</span><span class="token punctuation">(</span>in <span class="token operator">!=</span> null<span class="token punctuation">)</span> in<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
           <span class="token keyword">if</span><span class="token punctuation">(</span>out <span class="token operator">!=</span> null<span class="token punctuation">)</span> out<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IOException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>

    <span class="token punctuation">}</span>


<span class="token punctuation">}</span>

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

效果图:
在这里插入图片描述

后记:

如果各位看官有疑问的或者有哪里解释的不清楚的,欢迎提出,在下会细心改正,大家共同进步,加油!!!

[转载自](https://blog.csdn.net/qq_43619271/article/details/106301667)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用字节流复制文本文件: ```java import java.io.*; public class ByteStreamCopy { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("source.txt"); FileOutputStream fos = new FileOutputStream("target.txt"); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { fos.write(buffer, 0, len); } fis.close(); fos.close(); System.out.println("文件复制成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` 使用字符流复制文本文件: ```java import java.io.*; public class CharStreamCopy { public static void main(String[] args) { try { FileReader fr = new FileReader("source.txt"); FileWriter fw = new FileWriter("target.txt"); char[] buffer = new char[1024]; int len; while ((len = fr.read(buffer)) != -1) { fw.write(buffer, 0, len); } fr.close(); fw.close(); System.out.println("文件复制成功!"); } catch (IOException e) { e.printStackTrace(); } } } ``` ### 回答2: 编写一个程序来复制文本文件需要考虑许多因素,如何打开文件、读写文件、关闭文件等等。在 Java ,有两种流可以用来读写文本文件,分别是字节流字符流。下面将分别介绍如何使用这两种流来复制一个文本文件使用字节流复制文本文件 字节流用于读写二进制文件,读取时返回的是字节,写入时也只能写字节。但是,我们可以将字节转换为字符串,然后对其进行进一步处理。以下是使用字节流复制文本文件详细步骤: 1.创建一个 FileInputStream 对象,并用它打开待复制文件。 2.创建一个 FileOutputStream 对象,并用它打开输出文件。 3.创建一个 byte 数组,用于存储读入的字节。 4.使用 FileInputStream 的 read() 方法从输入文件读取字节,然后把它们写入到输出文件。 5.重复步骤 4,直到文件结束。 6.关闭两个流。 下面是字节流复制文本文件的示例代码: try (FileInputStream inputStream = new FileInputStream("input.txt"); FileOutputStream outputStream = new FileOutputStream("output.txt");) { byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } } catch (Exception e) { e.printStackTrace(); } 使用字符流复制文本文件 字符流用于读写文本文件,读取时返回的是字符,写入时也只能写字符。相比之下,字符流更适合处理文本文件。以下是使用字符流复制文本文件详细步骤: 1.创建一个 FileReader 对象,并用它打开待复制文件。 2.创建一个 FileWriter 对象,并用它打开输出文件。 3.创建一个 char 数组,用于存储读入的字符。 4.使用 FileReader 的 read() 方法从输入文件读取字符,然后把它们写入到输出文件。 5.重复步骤 4,直到文件结束。 6.关闭两个流。 下面是字符流复制文本文件的示例代码: try (FileReader reader = new FileReader("input.txt"); FileWriter writer = new FileWriter("output.txt");) { char[] buffer = new char[1024]; int length; while ((length = reader.read(buffer)) > 0) { writer.write(buffer, 0, length); } } catch (Exception e) { e.printStackTrace(); } 无论是使用字节流还是字符流复制文本文件,都需要注意关闭流的操作。只有在保证流已经被关闭之后,我们才能确保文件的操作已经完成。 ### 回答3: 在Java,我们可以通过字节流字符流实现文件复制字节流字节为单位进行文件操作,而字符流以Unicode字符为单位进行文件操作。下面我们将分别使用字节流字符流实现文件复制使用字节流复制文本文件: 1. 创建一个FileInputStream对象和一个FileOutputStream对象,分别用于读取源文件和写入目标文件的数据。 2. 使用byte数组来缓存读取源文件字节数据,每次读取一段数据,然后将其写入目标文件。 3. 复制完成后,要记得关闭输入流和输出流。 以下是实现代码: public static void copyFileByByte(String source, String target) throws IOException { FileInputStream inputStream = null; FileOutputStream outputStream = null; try { inputStream = new FileInputStream(source); outputStream = new FileOutputStream(target); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } } finally { if (inputStream != null) { inputStream.close(); } if (outputStream != null) { outputStream.close(); } } } 使用字符流复制文本文件: 1. 创建一个FileReader对象和一个FileWriter对象,分别用于读取源文件和写入目标文件的数据。 2. 使用char数组来缓存读取源文件的字符数据,每次读取一段数据,然后将其写入目标文件。 3. 复制完成后,要记得关闭输入流和输出流。 以下是实现代码: public static void copyFileByChar(String source, String target) throws IOException { FileReader reader = null; FileWriter writer = null; try { reader = new FileReader(source); writer = new FileWriter(target); char[] buffer = new char[1024]; int length; while ((length = reader.read(buffer)) > 0) { writer.write(buffer, 0, length); } } finally { if (reader != null) { reader.close(); } if (writer != null) { writer.close(); } } } 以上便是使用字节流字符流分别实现文件复制的过程,两种方法均可以实现文本文件复制操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值