java - 使用 FileInputStream 读取一个文件并使用 FileOutputStream 写入另一个文件

标签 java

我试图从一个文件中读取数据,然后使用标题中指定的类将读取的字节写入另一个文件。我成功地做到了这一点,但是当我尝试尝试不同的事情时,我遇到了一个我不理解的问题.

这是代码

import java.io.*;
public class FileInputStreamDemo {

    public static void main(String[] args)
            throws Exception {
        // TODO Auto-generated method stub
        int size;
        InputStream f = new
                FileInputStream("G:/Eclipse Workspace/FileInputStream Demo/src/FileInputStreamDemo.java");

        System.out.println("Total available bytes: " + (size = f.available()));
    /*int n=size/40;
    System.out.println("first " + n + " bytes of file one read() at a time");

    for (int i=0;i<n;i++)
    {
        System.out.print((char) f.read());
    }
    System.out.println("\n Still available: " + f.available());
    System.out.println("reading the next" + n + "with one read(b[])");
    byte b[] = new byte[n]; */
    /*for(int i=0;i<size;i++)
    {
        System.out.print((char) f.read());
    }*/
        OutputStream f1 = new
                FileOutputStream("G:/Eclipse Workspace/FileInputStream Demo/test.txt");
        for (int count = 0; count < size; count++) {
            f1.write(f.read());
        }
        for (int i = 0; i < size; i++) {
            System.out.print(f.read());
        }

        f.close();
        f1.close();
    }
}

我所说的问题是,当我第一次从 FileInputStream 对象 f 读取时,即 f.read() 并写入它到 f1FileOutputStream 对象,它继续执行它应该执行的操作,但是当我尝试再次读取它时,它返回 -1。为什么会这样?

最佳答案

使用 RandomAccessFile 和 seek(0) 方法返回开头。

RandomAccessFile file = new RandomAccessFile(new File("G:/Eclipse Workspace/FileInputStream Demo/src/FileInputStreamDemo.java"), "r");

这里是示例代码:

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;

public class FileInputStreamDemo {

    public static void main(String[] args) throws Exception {
        long size;
        File file = new File("D:/Workspace/JavaProject/src/com/test/FileInputStreamDemo.java");
        RandomAccessFile f = new RandomAccessFile(file, "r");

        System.out.println("Total available bytes: " + (size = file.length()));
        OutputStream f1 = new FileOutputStream(new File(
                "D:/Workspace/JavaProject/resources/test.txt"));
        for (int count = 0; count < size; count++) {
            f1.write(f.read());
        }
        f.seek(0);
        for (int i = 0; i < size; i++) {
            System.out.print((char)f.read());
        }

        f.close();
        f1.close();
    }
}

关于java - 使用 FileInputStream 读取一个文件并使用 FileOutputStream 写入另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22282434/

相关文章:

java swing jtable 在单个表中从数据库添加两个表

java - NullPointerException 在 Google App Engine LocalSErviceTestHelper 上调用 tearDown()

java - jmockit 捕获模拟方法参数

java - 从 Controller ,数据没有转换为 html View 页面

java - 如何使用 Hibernate 根据产品名称和价格搜索类别?

java - Eclipse:跳过快捷方式仅在将焦点置于当前编辑器窗口后才有效

Java错误: <identifier> expected inside protected interface

java - JScrollpane 无法正常显示

Ubuntu Linux 上的 Java 崩溃

java - 问题 - For 循环仅填充二维数组的第一个位置而不是整个二维数组