我有一个接受File作为参数的函数。我不想创建/写一个新文件(我没有文件系统的写访问权),以便将我的字符串数据传递给该函数。我应该补充一点,文件中不存在String数据(因此我无法从文件中读取数据)。
我可以使用Streams并将它们“转换”为File对象吗?
答案 0 :(得分:58)
通常当方法接受文件时,附近有另一种接受流的方法。如果不是这种情况,则API编码错误。否则,您可以使用临时文件,在许多情况下通常会授予权限。如果是applet,您可以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) {
}
答案 1 :(得分:42)
没有;类File
的实例表示文件系统中的路径。因此,您只能将该函数用于文件。但也许有一个重载需要InputStream
?
答案 2 :(得分:9)
Java中的File对象表示目录或文件的路径,而不是文件本身。您不需要具有对文件系统的写访问权来创建File
对象,只有在您打算实际写入文件时才需要它(例如,使用FileOutputStream)
答案 3 :(得分:6)
File
类表示文件的“想法”,而不是用于I / O的实际句柄。这就是File
类具有.exists()
方法的原因,以告诉您文件是否存在。 (你怎么能有一个不存在的File
对象?)
相比之下,构造new FileInputStream(new File("/my/file"))
会为您提供一个实际的流来读取字节。
答案 4 :(得分:-2)
FileReader r = new FileReader(file);
使用文件阅读器加载文件,然后将其内容写入字符串缓冲区。
上面的链接向您展示了如何完成此操作的示例。正如本答案的其他帖子所说,只要您不打算对实际文件进行更改,就不需要写入权限即可将文件加载到内存中。