java如何将一个InputStream写入文件啊?

publicFilefile_put_contents(Stringfile_name,InputStreamis){Filefile=newFile(file_name... public File file_put_contents(String file_name,InputStream is){
File file=new File(file_name);
OutputStream os=null;
try{
os=new FileOutputStream(file);
byte buffer[]=new byte[4*1024];
while((is.read(buffer))!=-1){
os.write(buffer);
}
os.flush();
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
os.close();
}
catch(Exception e){
e.printStackTrace();
}
}
return file;
}

方法没有报错,可是写的文件和原来不一样,导致不能用,如视频不能播放,原来是可以播放的。
展开
 我来答
百度网友1a812615e
推荐于2017-10-13 · TA获得超过1146个赞
知道小有建树答主
回答量:739
采纳率:66%
帮助的人:419万
展开全部
while((is.read(buffer))!=-1){
os.write(buffer);
}
这几行有问题,,,is.read(buffer)方法的返回值表示读取的有效字节数,你的buffer数组长度是4*1024,但是每次读取不可能都是这么多字节,而os.write(buffer);则是每次都是写入4*1024个字节,所以新的文件肯定比旧的文件大,,,,改写方法如下:
int len = 0;
while((len = is.read(buffer)) != -1)
{
os.write(buffer,0,len);

}
nuimeng1st
推荐于2017-09-27 · TA获得超过198个赞
知道小有建树答主
回答量:153
采纳率:100%
帮助的人:127万
展开全部

基于流(Stream)的解决

  1. 流是单向的有方向性的描述信息流的对象,InputStream是输入流的接口,对程序来说是入,是读,可以从文件读,缓存区读,网络节点读等等.

  2. 写入文件,对程序来说是出,是写,就是FileOutputStream,可以写入int也可以byte[]

所以解决方案就是从InputStream中读出内存到byte[]中然后,使用FileOutputStream写入文件中.比如:其中一种写法

InputStream is = new FileInputStream("a.txt");

FileOutputStream fos = new FileOutputStream("b.txt");

byte[] b = new byte[1024];

while((is.read(b)) != -1){

fos.write(b);

}

is.close();

fos.close();

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
快去学吧
高粉答主

2018-03-31 · 说的都是干货,快来关注
知道大有可为答主
回答量:1.8万
采纳率:98%
帮助的人:1158万
展开全部

java通过InputStream读取和写入文件操作实例代码

1. File to InputStream

File file = new File("file.xml");
InputStream inputStream = new FileInputStream(file);

2.InputStream to File

InputStream inputStream = new FileInputStream("file.xml");

OutputStream  outputStream = new FileOutputStream("file-new.xml");

int bytesWritten = 0;
int byteCount = 0;

byte[] bytes = new byte[1024];

while ((byteCount = inputStream.read(bytes)) != -1)
{
outputStream.write(bytes, bytesWritten, byteCount);
bytesWritten += byteCount;
}
inputStream.close();
outputStream.close();

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
该ID已被注销
2012-07-06 · TA获得超过656个赞
知道小有建树答主
回答量:200
采纳率:0%
帮助的人:134万
展开全部
/**
* 描述:文件上传
* @param cFile CommonsMultipartFile
* @param dirPath String 保存文件夹的文件夹+文件名(不加后缀)
* @return String 文件名称
*/
public static String fileUpLoad(CommonsMultipartFile cFile,String dirPath,ServletContext servletContext){

String fileName=dirPath.substring(dirPath.lastIndexOf("/"),dirPath.length());

dirPath = dirPath.substring(0,dirPath.lastIndexOf("/"));

if(!cFile.isEmpty()){
File dir = new File(dirPath);

if(!dir.exists()){

boolean flag = dir.mkdirs();

}

String ext = cFile.getFileItem().getName();

ext=ext.substring(ext.lastIndexOf("."),ext.length());

String srcFile = dirPath + "/" + fileName + ext;

//String destFile = null;
File file = new File(srcFile);

try{

cFile.getFileItem().write(file);//将上传的文件写入文件夹中

fileName = file.getName();

return fileName;

}catch (Exception e) {

e.printStackTrace();

return null;

}

}else {

return null;

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
廖北伯
2012-07-06 · TA获得超过526个赞
知道小有建树答主
回答量:375
采纳率:66%
帮助的人:290万
展开全部
一次读4K在末尾可能会出问题.
is.read(buffer) 可能没读满, 然後当成有读满写出去.
建议先改成一次读一个byte试试看.
成功後再试一次读4K.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式