我想问下:在我用FileInputStream和FileOutputStream复制一个jpg文件的时候没有问题成功的执行了,也复制过去了,没有丢失,复制那个jpg文件大小为118KB。但我换用FileReader
和FileWriter做这个操作的时候也可以成功的执行复制操作,可是复制过去的jpg文件却小了,从118KB变成了108KB,图片也显示不了。请问下为什么?下面是我写是程序代码:
import java.io.*;
public class TestCopy {
public static void main(String[] args) {
int b = 0;
try {
//BufferedInputStream br = new BufferedInputStream(new FileInputStream("e://图片//010.jpg"));
//BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("f://TestCopy//000.jpg"));
BufferedReader br = new BufferedReader(new FileReader("e://图片//010.jpg"));
BufferedWriter bw = new BufferedWriter(new FileWriter("f://TestCopy//0012.jpg"));
/*while((b = br.read())!= -1) {
bw.write(b);
}*/
String s = null;
while(( s = br.readLine()) != null) {
bw.write(s);
}
bw.flush();
br.close();
bw.close();
}catch(FileNotFoundException e1) {
System.out.println("未找到文件");
e1.printStackTrace();
}catch(IOException e2) {
System.out.println("复制错误");
e2.printStackTrace();
}
System.out.println("复制成功");
}
}
和FileWriter做这个操作的时候也可以成功的执行复制操作,可是复制过去的jpg文件却小了,从118KB变成了108KB,图片也显示不了。请问下为什么?下面是我写是程序代码:
import java.io.*;
public class TestCopy {
public static void main(String[] args) {
int b = 0;
try {
//BufferedInputStream br = new BufferedInputStream(new FileInputStream("e://图片//010.jpg"));
//BufferedOutputStream bw = new BufferedOutputStream(new FileOutputStream("f://TestCopy//000.jpg"));
BufferedReader br = new BufferedReader(new FileReader("e://图片//010.jpg"));
BufferedWriter bw = new BufferedWriter(new FileWriter("f://TestCopy//0012.jpg"));
/*while((b = br.read())!= -1) {
bw.write(b);
}*/
String s = null;
while(( s = br.readLine()) != null) {
bw.write(s);
}
bw.flush();
br.close();
bw.close();
}catch(FileNotFoundException e1) {
System.out.println("未找到文件");
e1.printStackTrace();
}catch(IOException e2) {
System.out.println("复制错误");
e2.printStackTrace();
}
System.out.println("复制成功");
}
}
解决方案 »
- 游戏服务器端开发请进
- 建一个TreeSet<Short>数组的问题
- 有关java的问题
- 有关JAVA二分法的算法
- 怎么样才能在java中获取一个文件夹中的所有文件名,我该怎么做啊
- 在java中, 我想作一个自动产生的订单编号,,就是把当前日期转化为为数字,如何作,,,谢谢了,,,,在家给看看,
- 【调查】大家一般用哪种编译器?
- poi 高级问题 望看到的人快来帮助
- 关于一JAVA程序运行另一程序的输出问题,555,多给些分,帮忙啊~~~~
- 送分题-------------〉〉〉jar的问题
- 听说J2SE最新版本是J2SE 7.0 (1.7.0) Dolphin 请问在哪里下载,下载哪个文件呀?新手!谢谢!
- 使用LINUX+Tomcat的请进,如何在图片里显示中文?
reader和writer是两个字节两个字节复制,主要用于文字,你要是用来传文件中间被截断了就肯定出错。
您好!至于inputstream和outputstream,一个字节一个字节读和一个字节一个字节写,这个我清楚,reader和writer我也明白,但不明白的是您说的“你要是用来传文件中间被截断了就肯定出错”。
我感觉无论是txt还是jpg应该都是一样的,无论是用inputstream和outputstream还是reader和writer都能很好的把文本文件复制,当然inputstream和outputstream不能复制中文,那么用reader和writer复制jpg的时候为什么就会出错呢,图片不也是由那些代码组成的吗? 那么用reader和writer复制,也能读,那为什么读不全呀 ? 一起读两个字节又怎么样呀? readLine()一读一行一直读到空为止,write(String s)这个方法也可写字符串,我就不明白为什么?
还有您说的“ 中间被截断了”是什么意思 ?
FileReader和FileWriter其实主要作用是读取字符的,也就是普通文本用的,所以才是2个字节一读.
感觉出错不在于5楼的描述,而是在FileReader和FileWriter读取2个字节之后会按照Unicode进行转码,最后读取的结果失去了原有的格式,jpg中的数据以2个字节为单位转码为Unicode字符,最后把字符写入了文件....当然就浮云咯...jpg就使用FileInputStream吧,或者用channel也行.很好奇如果FileWriter在写入之前把数据按Unicode还原,会不会就正常了.(当然,只是好奇,实际这么做是吃力不讨好)...
你readLine之后的那个换行怎么不输出啊?
bw.write(s);
bw.write("\n");这样也可能有问题,因为换行可能是 \n 也可能是 \r\n
无法确定是哪个,所以用byte操作才是根本。