【问题标题】:Create a File object in memory from a string in Java从 Java 中的字符串在内存中创建 File 对象
【发布时间】:2011-08-16 19:13:55
【问题描述】:

我有一个接受 File 作为参数的函数。我不想创建/写入一个新文件(我没有对文件系统的写访问权),以便将我的字符串数据传递给函数。我应该补充一点,文件中不存在字符串数据(因此我无法从文件中读取数据)。

我可以使用 Streams 并将它们“转换”为 File 对象吗?

【问题讨论】:

  • 您能否链接/发布采用File 对象的代码?正如答案所述,File 对象就像对文件系统中某个位置的引用,因此如果没有实际文件就很难模拟。但是,如果您的函数采用 FileReaderFileInputStream,您可以轻松修改代码以接受非文件输入。
  • 内存映射文件是您的选择。这些是 Java 中的特殊文件,允许 Java 程序直接从内存中访问内容。详情请通过此链接:javarevisited.blogspot.com/2012/01/…

标签: java file file-io


【解决方案1】:

通常当一个方法接受一个文件时,附近有另一个方法接受一个流。如果不是这种情况,则 API 编码错误。否则,您可以使用临时文件,在许多情况下通常会授予权限。如果是小程序,可以request write permission

一个例子:

try {
    // Create temp file.
    File temp = File.createTempFile("pattern", ".suffix");

    // Delete temp file when program exits.
    temp.deleteOnExit();

    // Write to temp file
    BufferedWriter out = new BufferedWriter(new FileWriter(temp));
    out.write("aString");
    out.close();
} catch (IOException e) {
}

【讨论】:

  • 无法请求写入权限(它是 Google AppEngine)
【解决方案2】:

没有; File 类的实例表示文件系统中的路径。因此,您只能将该函数用于文件。但也许有一个重载需要 InputStream 代替?

【讨论】:

    【解决方案3】:

    Java 中的File 对象表示目录或文件的路径,而不是文件本身。创建File 对象不需要对文件系统具有写访问权限,仅当您打算实际写入文件时才需要它(例如使用FileOutputStream

    【讨论】:

    • 如果您需要将文件传递给外部 API,则需要一个实际文件 - 传递“空”文件对象是行不通的。
    【解决方案4】:

    File 类代表文件的“想法”,而不是用于 I/O 的实际句柄。这就是为什么File 类有一个.exists() 方法来告诉你文件是否存在。 (你怎么会有一个不存在的File 对象?)

    相比之下,构造new FileInputStream(new File("/my/file")) 为您提供了一个实际的流来读取字节。

    【讨论】:

      【解决方案5】:
      FileReader r = new FileReader(file);
      

      使用文件阅读器加载文件,然后将其内容写入字符串缓冲区。

      example

      上面的链接向您展示了如何完成此操作的示例。正如此答案的其他帖子所说,将文件加载到内存中,只要您不打算更改实际文件,就不需要写访问权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 2014-11-22
        • 1970-01-01
        • 2012-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多