第1个回答 推荐于2017-09-01
Reader跟Writer是用来读写字符流的。
常见的文件几乎都不会是字符流文件。
所以,用他们来复制文件并不合适。
如果单纯的原封不动地复制文件的话,直接用InputStream和OutputStream就好了。
这两个类才是面向字节流的。
可以原封不动的复制。
用buffered包一下可以提高效率。
如以下代码可复制文件:
InputStream input = new FileInputStream(sourcefile);
FileOutputStream output = new FileOutputStream(destfile);
BufferedInputStream bis = new BufferedInputStream(input);
BufferedOutputStream bos = new BufferedOutputStream(output);
byte[] byt = new byte[1024];
while (bis.read(byt) != -1) {
bos.write(byt, 0, byt.length);
bos.flush();
}
try {
input.close();
output.close();
bis.close();
bos.close();
} catch (Exception e) {
}本回答被提问者采纳
第2个回答 2012-06-05
加一条判断语句,如果是文件最后一行,则不调用newLine();
if(null==br.readLine(){
}
赋readLIne方法定义:
public String readLine()
throws IOException
读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。
返回:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
抛出:
IOException - 如果发生 I/O 错误
第3个回答 2012-06-05
BufferedWriter,在windows下newLine会写入\r\n两个字符作为换行符。
如果只想\n一个,就手工写入一个换行符
bw.writer("\n");
如果断行很多,就要检查循环中是否得当多写了东西。
第4个回答 2012-06-05
(bf.readLine()=null)相当于br又向下移了一行。
这样试试看:
int i=0;
while((a=bf.readLine())!=null){
if(i==0);
else
a="\r\n"+a;
bw(a);
i++;
}