JAVA:FileInputStream和FileOutputStream

时间:2012-05-08 04:48:48

标签: java fileinputstream fileoutputstream

我对输入和输出流有这个奇怪的事情,我只是无法理解。 我使用inputstream从这样的资源中读取属性文件:

Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream( "/resources/SQL.properties" );
rop.load(in);
return prop;

找到我的文件并成功更新。我尝试编写这样的修改设置:

prop.store(new FileOutputStream( "/resources/SQL.properties" ), null);

我从存储中得到了奇怪的错误:

java.io.FileNotFoundException: \resources\SQL.properties (The system cannot find the path specified)

那么为什么要改变属性的路径呢?如何解决这个问题? 我在Windows上使用Netbeans

3 个答案:

答案 0 :(得分:6)

问题是getResourceAsStream()正在解析相对于类路径的路径,而new FileOutputStream()直接在文件系统中创建文件。他们有不同的起点。

通常,您无法回写加载资源的源位置,因为它可能根本不存在于文件系统中。例如,它可能位于jar文件中,JVM不会更新jar文件。

答案 1 :(得分:3)

可能有效

try
{
java.net.URL url = this.getClass().getResource("/resources/SQL.properties");

java.io.FileInputStream pin = new java.io.FileInputStream(url.getFile());

java.util.Properties props = new java.util.Properties();

props.load(pin);
}
catch(Exception ex)
{
ex.printStackTrace();
}

并查看以下网址

getResourceAsStream() vs FileInputStream

答案 2 :(得分:1)

请参阅此问题:How can I save a file to the class path

这个答案https://stackoverflow.com/a/4714719/239168

总结:你不能总是简单地将你从类路径读取的文件保存回来(例如,一个文件 罐)

但是如果它确实只是类路径上的一个文件,那么上面的答案有一个很好的方法