当前位置: 首页 > 知识库问答 >
问题:

OutputStream类用于写入文件。怎么可能呢?

鲁浩渺
2023-03-14

以下代码引自:http://examples . javacodegeeks . com/core-Java/io/file output stream/Java-io-file output stream-example/

虽然OutputStream是一个抽象方法,但是在下面的代码中,OutputStream对象是用来写入文件的。

Files.newOutputStream(filepath))返回OutputStream。然后,out的类型是OutputStream,out引用OutputStream。

当OutputStream是一个抽象类时,这怎么可能呢?

package com.javacodegeeks.core.io.outputstream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileOutputStreamExample {

    private static final String OUTPUT_FILE = "C:\\Users\\nikos\\Desktop\\TestFiles\\testFile.txt";
    public static void main(String[] args) {

        String content = "Hello Java Code Geeks";

        byte[] bytes = content.getBytes();

        Path filepath = Paths.get(OUTPUT_FILE);

        try ( OutputStream out = Files.newOutputStream(filepath)) {

            out.write(bytes);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

共有1个答案

幸鸿轩
2023-03-14

仅仅因为声明的类型是 OutputStream,这并不意味着实现不会创建 OutputStream 的具体子类的实例。您一直在接口中看到这一点。例如:

public List<String> getList() {
    return new ArrayList<String>();
}

基本上,您需要区分公开的API(使用抽象类)和实现(可以选择使用它想要的任何子类)。

所以Files.newOutputStream可以实现为:

public static OutputStream newOutputStream(Path path)
    throws IOException {
  return new FileOutputStream(path.toFile());
}
 类似资料:
  • 我在Camel中有一个长时间运行的进程,它是由HTTP请求触发的。我想将状态更新写入Outputstream,但在客户端没有得到响应。 我尝试使用以下方法: 骆驼-路线: 处理器测试: 以及呼叫代码: 但我只有在处理器中设置主体(注释行)时才得到响应。有没有办法保持camel中的连接并继续向其写入?

  • 问题内容: 我需要读取文件路径为“ C:\ file.pdf”的pdf文件,并将其写入outputStream。最简单的方法是什么? ................................................... ................................................... 问题答案: import java.io.*; 到目前为止

  • 问题内容: 这段代码曾经很好(在某种意义上,编译器没有抱怨): 从Swift 5.0开始,这会产生警告: 警告:不建议使用“ withUnsafeBytes”:请改用 我试着用所提出的方法,但我似乎无法缠斗到这最终需要。 如何以不推荐的方式编写此函数? 问题答案: 诀窍是使用函数: 尽管此功能适用于Swift 5.0,但显然存在一些问题。参见相关论坛讨论。

  • 问题内容: 阅读有关Java文件I / O管理的一些资料,我知道输入和输出操作有不止一种选择。 这些是: 和 和 和 和 类 以下什么是文本文件管理的最佳选择? 序列化的最佳替代方法是什么?Java NIO对此有何评论? 问题答案: 两种数据 一般来说,有两个“世界”: 二进制数据 文字数据 当它是一个文件(或插座,或在DB,还是......一个BLOB),那么它总是二进制数据 第一次 。 这些二

  • 我有一个使用Apache Beam2.20的Java应用程序。我读取输入文件,进行过滤和转换,然后用parquet格式将结果写入S3。 据我所知,在spark中它可以实现这一点。

  • 问题内容: 我将为直接输出到OutputStream的XML解析Java类编写junit测试。例如,将产生类似于写入XmlWriter实例内部的输出流的内容。问题是如何测试这种行为。一种解决方案当然是让OutputStream成为FileOutputStream,然后通过打开写入的文件来读取结果,但这不是很好。 问题答案: 使用ByteArrayOutputStream,然后使用toByteArr

  • 我试图在操作中读取Excel文件,或向其中添加新数据并将其写回。我还试图用通量和Mono来完成一个完整的反应过程。其思想是通过webservice返回结果文件或bytearray。 我的问题是如何以非阻塞方式获取InputStream和OutputStream? 我正在使用Apache Poi库读取并生成Excel文件。 我目前有一个基于混合Mono.fromCallable()和阻塞代码获取输入

  • 本文向大家介绍怎么引入(调用)一个JS文件,包括了怎么引入(调用)一个JS文件的使用技巧和注意事项,需要的朋友参考一下 我们旺旺需要调用别的 js文件。怎么处理? 看随机抽取这个例子。在一个页面中如下: 我们可以把 js 放在另外一个文件里,比如当前文件夹的 a.js 中。 这样 html 页面如下: a.js 这样就行了。 当然,也可以把 a.js放在web上,然后引用成下面这样。 以上所述是小