java文件复制(bufferedreader读取一个文件内容,用bufferedwriter 写入到另一个文件)

发现不能自动换行,用newLine()换行后,写入的文件最后多一个换行符,请问怎么解决?FileOutputStream写入时就是完整复制的。while((a=bf.re... 发现不能自动换行,用newLine()换行后,写入的文件最后多一个换行符,请问怎么解决?
FileOutputStream写入时就是完整复制的。
while((a=bf.readLine())!=null){
bw.write(a);
//bw.write(a+"\r\n"); //最后一行有换行
//if(bf.readLine()=null) ???似乎不行啊
bw.newLine(); //最后一行有换行
}
展开
 我来答
198901245631
推荐于2017-10-10 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1733万
展开全部
可以通过BufferedReader 流的形式进行流读取,之后通过readLine方法获取到每行的内容,之后通过bufferedwriter (如:OutputStreamWriter)。
BufferedReader bre = null;
OutputStreamWriter pw = null;//定义一个流
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流
pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例
while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环
{
pw.write(str );//将要写入文件的内容,写入到新文件
};
pw.close();//关闭流
bre .close();//关闭流
备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
104450
推荐于2017-09-01 · TA获得超过245个赞
知道小有建树答主
回答量:314
采纳率:100%
帮助的人:167万
展开全部
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) {
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aoisora_blue
2012-06-05 · TA获得超过412个赞
知道小有建树答主
回答量:583
采纳率:0%
帮助的人:366万
展开全部
加一条判断语句,如果是文件最后一行,则不调用newLine();
if(null==br.readLine(){
}

赋readLIne方法定义:
public String readLine()
throws IOException

读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。

返回:
包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
抛出:
IOException - 如果发生 I/O 错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9308069
2012-06-05 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1923万
展开全部
BufferedWriter,在windows下newLine会写入\r\n两个字符作为换行符。
如果只想\n一个,就手工写入一个换行符
bw.writer("\n");

如果断行很多,就要检查循环中是否得当多写了东西。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是谁我在哪我要干什么呢
2012-06-05 · TA获得超过560个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:373万
展开全部
(bf.readLine()=null)相当于br又向下移了一行。
这样试试看:
int i=0;
while((a=bf.readLine())!=null){
if(i==0);
else
a="\r\n"+a;
bw(a);
i++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式