通过文件形式转换
//从一个文件拷贝到另外一个文件
File inFile = new File("E:/amaroft/file/a.txt");
File outFile = new File("E:/amaroft/file/b.txt");
FileInputStream fis=new FileInputStream(inFile);
InputStreamReader isr=new InputStreamReader(fis);
//输出流,字节流
FileOutputStream fos=new FileOutputStream(outFile);
OutputStreamWriter os=new OutputStreamWriter(fos);
char[] cbuf = new char[1024];
while((isr.read(cbuf)!=-1)) {
os.write(cbuf,0,cbuf.length);
os.flush();
}
fis.close();
isr.close();
fos.close();
os.close();
不通过文件形式转换
File file = new File("E:/amaroft/file/a.txt");
BufferedInputStream bis = null;
ByteArrayOutputStream arrayOutputStream = null;
OutputStream bos = null;
try {
// 模拟读入一个文件,作为输入流
bis = new BufferedInputStream(new FileInputStream(file), 1024);
// 创建ByteArray输出流,所有的输出可以输出到ByteArray中,可以替代一个文件
arrayOutputStream = new ByteArrayOutputStream();
//用buffered包装一下,为了提高效率使用缓冲区流
bos=new BufferedOutputStream(arrayOutputStream);
int len=-1;
//读取文件输入流,写入到输出流ByteArray中,输入流转成了输出流
byte[] buf = new byte[1024];
while ((len = bis.read(buf)) != -1) {
bos.write(buf,0,len);
}
bos.flush();//清空缓冲区(非必要)
//创建ByteArrayResource用ByteArray输出流的字节数组
InputStreamSource inputStreamSource = new ByteArrayResource(arrayOutputStream.toByteArray());
//至此把OutputStream已经转换成了InputStreamSource,输出流又转成了输入流
// 又将输入流转成了输出流
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStreamSource.getInputStream());
int bytesRead;
byte[] buffer = new byte[4096];
while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
// 将文件发送到客户端
bos.write(buffer, 0, bytesRead);
bos.flush();
}
} catch (Exception e) {
System.out.println(e);
} finally{
if(bos!=null){
bos.close();//关闭BufferedOutputStream输出流
}
if(arrayOutputStream!=null){
arrayOutputStream.close();//关闭ByteArray输出流
}
if(bis != null){
bis.close();
}
}