【问题标题】:JAVA: FileInputStream and FileOutputStreamJAVA:文件输入流和文件输出流
【发布时间】:2012-05-16 14:06:08
【问题描述】:

我对输入和输出流有这个奇怪的东西,我就是无法理解。 我使用 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

【问题讨论】:

  • 欢迎来到 SO。 +1 用于包含所有适当信息的措辞恰当的问题。

标签: java fileinputstream fileoutputstream


【解决方案1】:

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

一般来说,您不能写回加载资源的源位置,因为它可能根本不存在于文件系统中。例如,它可能在 jar 文件中,而 JVM 不会更新 jar 文件。

【讨论】:

  • 你能给我一个例子如何正确地写它吗?
  • 您无法正确写入。您通常不能写入加载资源的位置。它可能不存在于可写位置。
【解决方案2】:

可能会成功

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

【讨论】:

    【解决方案3】:

    请看这个问题:How can I save a file to the class path

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

    总而言之:您不能总是轻松地保存从类路径中读取的文件(例如, 罐子)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-25
      • 2013-03-07
      • 2013-09-05
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多