在Java中逐字符复制文件
我正在做一个练习,我必须用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
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
objectrd
和FileWriter
objectwr
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)
@arnauddenoyllewr.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对象的效率。