问题描述
- 字节流复制图片的问题,报错,复制失败,图片损坏而且为0 kb
-
import java.io.*;
class Lee{
public static void main (String[] args){
FileOutputStream fos=null;
FileInputStream fis=null;
try{
fos=new FileOutputStream("D:毕向东视频9.png");
fis=new FileInputStream("D:毕向东视频99.png");
byte [] buf=new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1)
{
fos.write(buf,0,len);} } catch(IOException e){ throw new RuntimeException("复制失败"); } finally{ try{ if(fis!=null) fis.close(); } catch(IOException e){ throw new RuntimeException("读取失败"); } } } }
解决方案
首先,你的文件路径有问题,编译出错,尽量使用/这个而不是反斜杠,因为反斜杠是转义字符。
其次,在你的异常分支打印堆栈信息,便于排错。throw new RuntimeException("复制失败");这句话抛出之前先打印e.printStackTrace();
解决方案二:
急求大神指点,谢谢了
解决方案三:
这路径写法编译不报错?应该得2个
fos=new FileOutputStream("D:\毕向东视频\9.png");
fis=new FileInputStream("D:\毕向东视频\99.png");
解决方案四:
不要写绝对路径,而且路径中最好不要带中文,复制的话 我建议字节流,因为字符流 一次读两个字节,有可能碰到结尾是单字节 就会出错!
解决方案五:
补充一下,你检查下图片的大小,如果超过1M,那么你使用1024字节的缓冲区就可能使文件受损的。
修正代码如下:
class Lee {
public static void main(String[] args) {
FileOutputStream fos = null;
FileInputStream fis = null;
try {
fos = new FileOutputStream("D:/copy.jpg");
fis = new FileInputStream("D:/照片打印/picture2.jpg");
byte[] buf = new byte[2048];
int len = 0;
while ((len = fis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("复制失败");
} finally {
try {
if (fis != null)
fis.close();
fos.close();
} catch (IOException e) {
throw new RuntimeException("读取失败");
}
}
}
}
时间: 2025-01-26 20:00:24