Java I / O流

时间:2016-10-12 18:43:57

标签: java java-io

我正在尝试使用Java I / O Stream将一个文件的内容复制到另一个文件。 我已经为此编写了以下代码,但它只复制了源文件的最后一个字母。

   package io.file;

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


public class FileCopyTester {

    public void copyFile() {
        FileInputStream fis = null;
        try{
            fis = new FileInputStream("resources/Source.txt");
            System.out.println("Started copying");
            int data =  fis.read();

        while (data != -1){
            try (FileOutputStream fos = new FileOutputStream("resources/Destination.docx")){
                fos.write(data);
                fos.close();
            }
            catch (IOException io) {
                System.err.println("Error o/p:"+io.getMessage());
            }
            System.out.print((char)data+" ");
            data = fis.read();
        }
        fis.close();
        System.out.println("End Copying");
        }

        catch(IOException ioe){
            System.err.println("ERROR: "+ioe.getMessage());
        }

    }

    public static void main(String[] args) {
        new FileCopyTester().copyFile();
    }
}

在源文件中我有类似的数据 22 / 7 3.142857

所以在目的地我只是得到 7 请帮助如果我遗漏了一些内容,比如不应该覆盖目标文件中的数据。

2 个答案:

答案 0 :(得分:5)

每次用一个字节覆盖文件。

解决方案:在while循环外打开输出流,然后关闭它。

答案 1 :(得分:0)

在循环的每个回合打开流是没有意义的 - 新数据会覆盖文件的旧内容。但是 - 使用"追加模式打开流"将使你的代码工作:

FileOutputStream fos = new FileOutputStream("resources/Destination.docx", true);

第二个更好的解决方案是在循环之前打开流:

FileInputStream fis = new FileInputStream("resources/Source.txt");
FileOutputStream fos = new FileOutputStream("resources/Destination.docx");

int data = fis.read();
while (data != -1){
    fos.write(data);
    data = fis.read();
}

fos.close();