【问题标题】:Write to a file stream returned from getResourceAsStream()写入从 getResourceAsStream() 返回的文件流
【发布时间】:2010-05-09 10:42:23
【问题描述】:

我从getResourceAsStream() 得到一个InputStream,我设法通过将返回的InputStream 传递给BufferedReader 来读取文件。

有什么方法我也可以写入文件吗?

【问题讨论】:

    标签: java web-services file-io


    【解决方案1】:

    不直接,不 - getResourceAsStream() 旨在返回只读资源的视图。

    但是,如果您知道资源是可写文件,则可以跳过一些环节,例如

    URL resourceUrl = getClass().getResource(path);
    File file = new File(resourceUrl.toURI());
    OutputStream output = new FileOutputStream(file);
    

    这在 unix 风格的系统上应该可以很好地工作,但是 windows 文件路径可能会导致这种消化不良。试试看,你可能会没事的。

    【讨论】:

    • 不幸的是,我不好。我必须在toUri() 中添加toString()new File(resourceUrl.toURI().toString());。但是现在,FileNoFoundException 在第三行被抛出:"vfszip:\C:\jboss-5.1.0.GA\server\default\deploy\IMAss4.war\WEB-INF\classes\wservices\markers.txt (The filename, directory name, or volume label syntax is incorrect)"
    • @Andreas:好的,这是 JBoss 的内部虚拟文件系统的障碍。这就是为什么您尝试做的事情是不可取的。
    • 那么,有什么方法可以将文件放在Web Pages 文件夹中并从我的Web 服务读取/写入它? (查看我的问题,了解我的文档结构:stackoverflow.com/questions/2797162/…
    【解决方案2】:

    有什么办法可以写信给 文件呢?

    谁说这是一个文件? getResourceAsStream() 的全部意义在于将其抽象出来,因为它可能不是真的。具体来说,资源可能位于 JAR 文件中,可能是从 HTTP 服务器读取的,或者实际上是 ClassLoader 的实现者可以想象的任何东西。

    您真的不应该想要写入属于您的程序分发的一部分的资源。在大多数情况下,这在概念上是错误的。设置或用户特定数据应转到Preferences API 或用户的主目录。

    【讨论】:

    • 那么有没有办法可以访问位于 jsp 页面所在位置的文件?即直接在Web Pages 文件夹中?来自网络服务即
    • 这个答案没有提供答案。应该是评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2011-07-11
    相关资源
    最近更新 更多