2011-08-16 60 views
68

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

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

+2

你可以链接/张贴需要'File'对象的代码吗?正如答案所述,“File”对象就像是对文件系统中某个位置的引用,因此如果没有实际的文件就很难模拟。但是,如果您的函数使用了“FileReader”或“FileInputStream”,则可以轻松修改代码以接受非文件输入。 – 101100

+0

内存映射文件可以是您的选择。这些是Java中的特殊文件,它允许Java程序直接从内存访问内容。详情请浏览此链接:http://javarevisited.blogspot.com/2012/01/memorymapped-file-and-io-in-java.html – Bikku

回答

32

否;类File的实例表示文件系统中的路径。因此,您只能将该功能用于文件。但也许有一个超载需要一个InputStream而不是?

+0

不可以:/不需要重载功能 –

-1
FileReader r = new FileReader(file); 

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

example

上面的链接向您介绍如何做到这一点的例子。正如此答案的其他帖子所说,将文件加载到内存中,只要您不打算更改实际文件,就不需要写入权限。

7

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

3

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

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

+2

好点;虽然没有回答这个问题。 – Jus12

47

通常,当一个方法接受一个文件时,附近还有另一个接受流的方法。如果情况并非如此,则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) { 
} 
+0

不能请求写入权限(它是Google AppEngine) –

相关问题