我有一个接受File作为参数的函数。我不想创建/写入新的文件(我没有对文件系统的写入权限),以便将我的字符串数据传递给函数。我应该补充一点,字符串数据不存在于文件中(所以我无法从文件中读取数据)。从Java中的字符串在内存中创建一个File对象
我可以使用Streams并将它们“转换”为File对象吗?
我有一个接受File作为参数的函数。我不想创建/写入新的文件(我没有对文件系统的写入权限),以便将我的字符串数据传递给函数。我应该补充一点,字符串数据不存在于文件中(所以我无法从文件中读取数据)。从Java中的字符串在内存中创建一个File对象
我可以使用Streams并将它们“转换”为File对象吗?
否;类File
的实例表示文件系统中的路径。因此,您只能将该功能用于文件。但也许有一个超载需要一个InputStream
而不是?
不可以:/不需要重载功能 –
FileReader r = new FileReader(file);
使用文件读取器加载文件,然后将其内容写入字符串缓冲区。
上面的链接向您介绍如何做到这一点的例子。正如此答案的其他帖子所说,将文件加载到内存中,只要您不打算更改实际文件,就不需要写入权限。
A File Java中的对象是表示目录或文件的路径,而不是文件本身。如果您打算实际写入文件(例如使用FileOutputStream),则不需要具有对文件系统的写入访问权限以创建对象,只需要它即可。
File
类代表“想法”的文件,而不是用于I/O的实际句柄。这就是为什么File
类有一个.exists()
方法来告诉你文件是否存在。 (你怎么能有一个不存在的File
对象?)
相比之下,构造一个new FileInputStream(new File("/my/file"))
为您提供了一个实际的流来读取字节。
好点;虽然没有回答这个问题。 – Jus12
通常,当一个方法接受一个文件时,附近还有另一个接受流的方法。如果情况并非如此,则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) –
你可以链接/张贴需要'File'对象的代码吗?正如答案所述,“File”对象就像是对文件系统中某个位置的引用,因此如果没有实际的文件就很难模拟。但是,如果您的函数使用了“FileReader”或“FileInputStream”,则可以轻松修改代码以接受非文件输入。 – 101100
内存映射文件可以是您的选择。这些是Java中的特殊文件,它允许Java程序直接从内存访问内容。详情请浏览此链接:http://javarevisited.blogspot.com/2012/01/memorymapped-file-and-io-in-java.html – Bikku