Java--IO流之用字节流将原文件拷贝到目标文件中

已经在上一篇中详细讲了字节流的概念和分类:

http://blog.csdn.net/asheandwine/article/details/78170637

在应用程序中,IO流通常都是成对出现的,输入流和输出流一起使用。

例如文件的拷贝就需要通过输入流来读取文件中的数据,通过输出流将数据写入文件。

下面例子中用 字节流InputStream和OutputStream 来操作文件 。


首先在F 盘根目录下新建一个文本文件吗 “123.txt” .里边内容随意。

再新建一个名为 “copy” 的空文件夹 。


我们的目的是将F盘根目录下的“123.txt” 拷贝到 copy 文件夹内

接下来通过一个案例来演示如何进行文件的拷贝。

void write(int b)向输出流中写入一个字节

public class FileFunction {
    public static void main(String[] args) throws FileNotFoundException {
        String fromFileName = "F:\\123.txt"; //原目标文件路径
        String toFileName = "F:\\copy\\123.txt";//拷贝后的地址
        FileFunction.copyFile(fromFileName,toFileName); // 拷贝

    }

    // 将原文件拷贝到目标文件中,如果原文件不存在,抛出 FileException 异常。
    public static void copyFile(String fromFileName, String toFileName) throws FileNotFoundException {
        //创建一个字节输入流,用于 读取 目标文件
        InputStream in = new FileInputStream(fromFileName);
        //创建一个字节输出流,用于将读取的数据 写入
        OutputStream out = new FileOutputStream(toFileName);

        int len;  // 记住每次读取的字节

        //开始进行读取和写入操作
        try {
            while ((len = in.read()) != -1) {  // 是否读到文件末尾
                out.write(len);   // 将读到的字节写入文件
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("文件拷贝成功");

        try {
            in.close(); //关闭流
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

  程序运行结束后,打开copy文件夹,发现F盘根目录下的 "123.txt" 文件被成功拷贝到了copy文件夹下。



在拷贝过程中,通过while循环将字节逐个进行拷贝,每循环一次就通过read( )的方法读取一个字节。
并通过write( )方法将该字节写入指定文件,循环往复,直到 len 的长度为-1,表示读取到了文件的末尾
结束循环,完成文件的拷贝。

以上虽然完成了文件的拷贝。但一个字节一个字节的读写,需要频繁的操作文件,效率很低。
当通过流的方式拷贝数据时,为了提高效率可以定义一个字节数组作为缓冲区。
在拷贝文件时,可以一次性的读取多个字节,并保存在字节数组中,
然后将字节数组里的数据一次性写入文件。

如下,只需要定义一个字节数组并且通过带参数的 read()和write()方法读写即可:

void write(byte[ ] b,int off,int len)将指定的byte数组中从偏移量off开始的len个字节写入输出流


public class FileFunction {
    public static void main(String[] args) throws FileNotFoundException {
        String fromFileName = "F:\\123.txt"; //原目标文件路径
        String toFileName = "F:\\copy\\123.txt";//拷贝后的地址
        FileFunction.copyFile(fromFileName,toFileName); // 拷贝
      
    }

    // 将原文件拷贝到目标文件中,如果原文件不存在,抛出 FileException 异常。
    public static void copyFile(String fromFileName, String toFileName) throws FileNotFoundException {
        //创建一个字节输入流,用于 读取 目标文件
        InputStream in = new FileInputStream(fromFileName);
        //创建一个字节输出流,用于将读取的数据 写入
        OutputStream out = new FileOutputStream(toFileName);
        
        byte[] buff = new byte[1024];// 1 定义一个字节数组作为缓冲区
        int len;  // 记住每次读取的字节

        //开始进行读取和写入操作
        //read(buff) 实现将读到的字节一次性写入文件
        try {
            while ((len = in.read(buff)) != -1) {  //  2  是否读到文件末尾
                out.write(buff,0,len);   //  3 从第一个字节开始,向文件中写入 len 个字节
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("文件拷贝成功");

        try {
            in.close(); //关闭流
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

对比上一个代码方法。只在 1  2  3 处做了更改

运行结果图:



  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 向文件追加内容可以使用Java的随机IO流。具体步骤如下: 1. 创建一个File对象,指定要操作的文件路径。 2. 创建一个RandomAccessFile对象,指定文件对象和打开模式为“rw”。 3. 将文件指针移动到文件末尾,使用RandomAccessFile对象的seek()方法。 4. 使用RandomAccessFile对象的write()方法向文件写入内容。 5. 关闭RandomAccessFile对象。 示例代码如下: ``` import java.io.*; public class AppendToFile { public static void main(String[] args) { String filePath = "test.txt"; String content = "Hello, world!"; try { File file = new File(filePath); RandomAccessFile raf = new RandomAccessFile(file, "rw"); raf.seek(file.length()); raf.write(content.getBytes()); raf.close(); System.out.println("内容已追加到文件末尾。"); } catch (IOException e) { e.printStackTrace(); } } } ``` ### 回答2: 在Java,我们可以使用RandomAccessFile类来向文件追加内容。使用RandomAccessFile类可以让我们操作文件的任意部分,而不是只能按顺序读写文件。 要向文件追加内容,我们需要先创建一个RandomAccessFile对象,并将打开方式设置为“rw”,即可读可写。然后,我们需要将文件指针移动到文件末尾,使用File.length()方法获取文件长度,然后使用RandomAccessFile.seek()方法将文件指针移动到文件末尾。此时,我们可以使用RandomAccessFile.write()方法将内容写入文件。 以下是向文件追加内容的示例代码: ```java import java.io.IOException; import java.io.RandomAccessFile; public class RandomAccessFileExample { public static void main(String[] args) { String fileName = "example.txt"; String content = "Hello World!"; try { RandomAccessFile file = new RandomAccessFile(fileName, "rw"); long fileLength = file.length(); file.seek(fileLength); file.writeBytes(content); file.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在这个示例,我们使用了RandomAccessFile类来向文件“example.txt”追加了字符串“Hello World!”。首先,我们创建了一个RandomAccessFile对象,并将打开方式设置为“rw”。然后,我们使用File.length()方法获取文件长度,将文件指针移动到文件末尾,使用RandomAccessFile.seek()方法将文件指针移动到文件末尾,最后使用RandomAccessFile.write()方法将内容写入文件。 需要注意的是,使用RandomAccessFile类来向文件追加内容需要保证文件已经存在,否则会抛出FileNotFoundException异常。此外,在使用RandomAccessFile类时需要注意文件指针的位置,否则会导致文件内容被覆盖或者文件读取失败。 ### 回答3: 在Java,使用随机IO流可以向文件追加内容。随机IO流能够在文件任意位置进行读写操作,而不仅仅是从文件开头或末尾。要使用随机IO流进行文件读写,需要先通过File对象创建一个RandomAccessFile对象。 首先,我们需要使用RandomAccessFile的构造方法来打开待追加内容的文件,注意需要以“rw”方式打开文件,以便随时向文件添加内容。另外,我们也可以使用read()方法读取随机文件的任意位置。写入到文件时,我们可以使用write()方法进行写入,但需要先将文件指针定位到写入位置,这可以通过seek()方法实现。 随机IO流文件追加内容的过程如下: 1. 创建RandomAccessFile对象,打开待追加内容的文件。 2. 使用seek()方法将文件指针定位到追加位置,即文件末尾。 3. 使用write()方法将数据写入文件。 4. 关闭RandomAccessFile对象。 下面是一段Java代码示例: ```java String fileName = "test.txt"; String content = "Hello World!"; try { // 打开文件,以读写方式打开 RandomAccessFile raf = new RandomAccessFile(fileName, "rw"); // 将文件指针定位到文件末尾 raf.seek(raf.length()); // 写入数据 raf.write(content.getBytes()); // 关闭文件 raf.close(); } catch (IOException e) { e.printStackTrace(); } ``` 以上代码,我们首先使用RandomAccessFile打开文件,然后使用seek()方法将文件指针定位到文件末尾。接着,我们使用write()方法将内容写入文件,最后关闭RandomAccessFile对象。 总之,随机IO流Java IO流一个非常灵活的用法,可以在文件的任意位置进行读写操作,且能够实现文件内容的追加,非常方便实用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值