大佬们问个IO流的问题

哦 泄特 2020-03-09 08:36:23




大家好 为什么用buffered导出的图片是这样的, 上面的图片是原图, 下面的是我导出的 以下是我全部的代码, 嫌麻烦可以直接看最下面我用=======隔开了,我试过word等其他文件是没有问题的,但是只要是图片就会少内容,是我的代码有问题吗?


package upload;
import java.io.*;
import java.util.*;

public class PhotoUpload {
public void create() throws IOException {
File file = null;
boolean a = true;
do{
System.out.println("请输入上传的图片路径");
String element=new Scanner(System.in).next();
if(!element.endsWith(".jpg")&&!element.endsWith(".bmp")&&!element.endsWith(".png")){
System.out.println("图片格式有误,请重新输入:");
continue;
}
file=new File(element);
if(!file.exists()&&!file.isDirectory()){
System.out.println("输入地址不合法,请重新输入:");
continue;
}
for (String s : new File("src/lib").list()) {
if(s.equals(file.getName())){
System.out.println("图片已经存在,请重新输入");
}else {
a=false;
}
}
}while (a);
try{
if(this.upload(file)){
System.out.println("图片已经保存成功!");
}
}catch (Exception e){
System.out.println("图片保存失败!");
}
}

=====================================================================
//IO代码
private boolean upload(File file) throws IOException {
BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file));
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("src/lib/"+file.getName()));
int len;
while ((len=bis.read())!=-1){
bos.write(len);
}
bis.close();
bos.close();
return true;
}
}



...全文
50 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
哦 泄特 2020-03-09
  • 打赏
  • 举报
回复
我查一下看看
qybao 2020-03-09
  • 打赏
  • 举报
回复
就是这个问题,你自己谷歌百度一下输出流flush的意义。 即使你再运行不出错,也只是偶然的,不能保证下次不出错。要永远消灭这个隐藏的bug,就是加flush。 你自己慢慢体会理解吧。
哦 泄特 2020-03-09
  • 打赏
  • 举报
回复
引用 1 楼 qybao的回复:
在bis.close();前加上bos.flush(); 否则输出缓存的数据还没输入完全文件,输出流就被关闭了。
不是这个问题,我过了一会又运行了一遍代码又好了
qybao 2020-03-09
  • 打赏
  • 举报
回复
在bis.close();前加上bos.flush(); 否则输出缓存的数据还没输入完全文件,输出流就被关闭了。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧