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

2024-11-16 06:57:33
推荐回答(5个)
回答1:

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);

}

回答2:

基于流(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();

回答3:

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();

回答4:

/**
* 描述:文件羡扮配上传
* @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;

}

}

回答5:

一启仔汪次读4K在末尾可能会出问题.
is.read(buffer) 可能没读满, 然後当成有读满写出去悄仔.
建议先改成一次读一个byte试戚拆试看.
成功後再试一次读4K.