在Java中逐字符复制文件

在Java中逐字符复制文件,java,file,filereader,filewriter,Java,File,Filereader,Filewriter,我正在做一个练习,我必须用Java一个字符一个字符地复制文件。我正在处理以下文件: Hamlet.txt To be, or not to be: that is the question. Whether 'tis nobler in the mind to suffer The slings and arrows of outrageous fortune, Or to take arms against a sea of troubles, And by opposing end them

我正在做一个练习,我必须用Java一个字符一个字符地复制文件。我正在处理以下文件:

Hamlet.txt
To be, or not to be: that is the question.
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles,
And by opposing end them ?
我创建了第二个文件,名为
copy.txt
,其中将包含
Hamlet.txt
的逐字符副本。问题是,在我运行代码后,
copy.txt
仍然为空

import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.PrintWriter;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class Combinations {
    public void run() {
        try {
            BufferedReader rd = new BufferedReader(new FileReader("Hamlet.txt"));
        PrintWriter wr = new PrintWriter(new BufferedWriter(new FileWriter("copy.txt")));
        copyFileCharByChar(rd, wr);
    }catch(IOException ex) {
        throw new RuntimeException(ex.toString());
    }
}

private void copyFileCharByChar(BufferedReader rd, PrintWriter wr) {
    try {
        while(true) {
            int ch = rd.read();
            if(ch == - 1) break;
            wr.print(ch);
        }
      } catch(IOException ex) {
        throw new RuntimeException(ex.toString());
    }
    }

public static void main(String[] args) {
    new Combinations().run();
}
}

因此,我编写了一个方法
copyFileCharByChar
,它接受
BufferedReader
object
rd
FileWriter
object
wr
rd
读取每个单独的字符,
wr
写入相应的字符。我做错了什么?

在这种情况下,您需要强制执行打印:

wr.print((char)ch);
或使用写入方法:

wr.write(ch);
您还需要关闭PrintWriter:

wr.close();

我不同意第一种说法。它可以在不强制转换为
char
的情况下工作(因为OP写入的是已经是ascii码的
rd.read()
的结果)。@Arnauddenoylle实际上,没有大小写,它只打印数字,因为ch是int。但是write方法不需要强制转换,只有在我调用print时才需要。@MutatingAlgorithm我很抱歉,我在没有演员的情况下进行了测试,效果很好。API采用和int,这是字符的ASCII码。因此,为了写入
1
,您将调用
wr.print(0x31)
@arnauddenoylle
wr.print(int)
将整数打印为文本,否?下面是:“打印一个整数。由string.valueOf(int)生成的字符串被转换成字节…”@wiskyspider似乎我们调用的不是同一个方法。在我的jvm(8)上,被调用的方法(带或不带强制转换)是相同的:
PrintWriter#write(int c)
btw,为什么
new PrintWriter(new BufferedWriter)(new FileWriter
new BufferedWriter(new FileWriter
)或
new FileWriter
就足够了。@arnauddenoyere每一级都提高writer对象的效率。