从Java中的字符串在内存中创建File对象


113

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

我可以使用流并将其“广播”到文件对象吗?


2
您可以链接/发布带有File对象的代码吗?正如答案所指出的,File对象就像对文件系统中某个位置的引用,因此如果没有实际文件,将很难进行模拟。但是,如果函数使用a FileReader或a FileInputStream,则可以轻松地修改代码以接受非文件输入。
101100

内存映射文件可以是您的选择。这些是Java中的特殊文件,允许Java程序直接从内存访问内容。有关详细信息,请通过以下链接:javarevisited.blogspot.com/2012/01/…–
细菌

Answers:


48

没有; 类的实例File表示文件系统中的路径。因此,您只能将该功能与文件一起使用。但是,也许有一个过载需要InputStream代替?


76

通常,当一种方法接受文件时,附近还有另一种方法接受流。如果不是这种情况,则说明API编码错误。否则,您可以使用临时文件,在许多情况下,这些文件通常会被授予权限。如果是applet,则可以请求写入权限

一个例子:

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) {
}

1
无法请求写入权限(是Google AppEngine)
乔恩·罗梅罗

12

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


1
如果需要将文件传递给外部API,则需要一个实际的文件-传递“空” File对象将不起作用。
安德烈·沃尔金

8

File类代表一个文件,而不是实际的手柄使用了I / O的“想法”。这就是为什么File该类具有一种.exists()方法来告诉您文件是否存在的原因。(如何拥有一个File不存在的对象?)

相比之下,构造a new FileInputStream(new File("/my/file"))给您一个实际的流以读取字节。


-1
FileReader r = new FileReader(file);

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.