玖叶教程网

前端编程开发入门

整理 | 输出流中的FileOutputStream

上节整理 | 输入流中的FileInputStream 中我们简单的了解了如何将文件内容作为字节流读取。本节我们来说说上节提到的FileOutputStream

FileOutputStream类是OutputStream的子类,其用于输出原始字节流,如图片视频等。

public class FileOutputStream extends OutputStream {}

FileOutputStream类是OutputStream的子类,其用于输出原始字节流,如图片视频等。Java API提供了5种构造器,分析源代码可以得出,无论是使用字符串类型的文件名,还是使用File对象来创建连接,最终都是利用文件描述符来建立连接。

//创建文件输出流以写入具有指定名称的文件 
public FileOutputStream(String name) throws FileNotFoundException {} 
//创建文件输出流以写入具体指定名称的文件,若append为true则字节将写入文件的末尾而不是开头 
public FileOutputStream(String name, boolean append) throws FileNotFoundException{} 
//创建文件输出流以写入由指定的File对象表示的文件 
public FileOutputStream(File file) throws FileNotFoundException {} 
//创建文件输出流以写入由指定的File对象表示的文件,若append为true则字节将写入文件的末尾而不是开头 
public FileOutputStream(File file, boolean append) throws FileNotFoundException {} 
//创建要写入指定文件描述符的文件输出流,该文件描述符表示与文件系统中实际文件的现有连接 
public FileOutputStream(FileDescriptor fdObj) {}

FileInputStream中Java API提供了read()方法用于读取字节,而FileOutputStream中Java API提供了write()方法用于写入字节。

//将指定的字节写入此文件输出流中 
public void write(int b) throws IOException {} 
//将指定字节数组中b.length个字节写入此文件输出流 
public void write(byte b[]) throws IOException {} 
//将从off开始的指定字节数组中len个字节写入此文件输出流 
public void write(byte b[], int off, int len) throws IOException {} 
//示例
public class RSD_OutputStream {
 public static void main(String[] args) {
 try {
 FileOutputStream fos = new FileOutputStream("D:/fileOutputStream.txt", true);
 fos.write("Hello World".getBytes());
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
}

示例最终运行结果

无论是在使用输入流FileInputStream还是使用输出流FileOutputStream,都需要在最后对流进行关闭,用于释放与此流关联的所有系统资源。

//关闭输入流 
fis.close(); 
//关闭输出流 
fos.close();

纸上得来终觉浅,绝知此事要躬行。——陆游《冬夜读书示子聿》

这里我们只是简单的介绍了两种常用的流处理方式,在项目开发中,我们也许会引入第三方的各类JAR包,其中也存在某些JAR包对字节流类做详细处理,因此我们需要活学活用。比如在JSP页面中显示我们在文档服务器中的文件时,我们需要使用到OutputStream类的子类ServletOutputStream类来写入流文件,并通过ServletResponse接口的getOutputStream()方法返回ServletOutputStream类的实例。

/**
 * 显示多媒体文件预览
 * @param request
 * @param response
 * @param filePath
 * @throws IOException
 */
@RequestMapping(value = "/showDmtFile.html")
public void showVideoOrImage(HttpServletRequest request,
 HttpServletResponse response,
 @RequestParam("filePath") String filePath) throws IOException {
 //文件绝对路径
 String fileAbsoultPath = fileSaveRootPath + filePath;
 //判断文件是否存在
 File file = new File(fileAbsoultPath);
 if(!file.exists()) {
 fileAbsoultPath = fileSaveRootPath + defaultPicPath;
 }
 FileInputStream in = new FileInputStream(file);
 ServletOutputStream out = response.getOutputStream();
 byte[] b = null;
 while (in.available() > 0) {
 if(in.available() > 10240) {
 b = new byte[10240];
 } else {
 b = new byte[in.available()];
 }
 in.read(b, 0, b.length);
 out.write(b, 0, b.length);
 }
 in.close();
 out.flush();
 out.close();
}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言