Java 爪哇元';无法识别JAR中的文件

Java 爪哇元';无法识别JAR中的文件,java,file,jar,Java,File,Jar,我的java程序的JAR文件中有一个.csv数据库文件。在我打包之前,该程序在NetBeans IDE中运行良好,但一旦我打包,它就拒绝相信文件在其中,即使我让它打印出它所查看的路径,并解压缩JAR以确保我告诉它查看正确的位置。如何让Java看到这一点 try { String path = Main.class.getResource("/items.csv").getPath(); db = new java.io.File(path); loadValues

我的java程序的JAR文件中有一个.csv数据库文件。在我打包之前,该程序在NetBeans IDE中运行良好,但一旦我打包,它就拒绝相信文件在其中,即使我让它打印出它所查看的路径,并解压缩JAR以确保我告诉它查看正确的位置。如何让Java看到这一点

  try
  {
    String path = Main.class.getResource("/items.csv").getPath();
    db = new java.io.File(path);
    loadValues(db);
  }
  catch (java.io.FileNotFoundException ex1)
  {
    System.out.println("Could not find database file (" + ui.db + ").");
  }

不要为资源创建
文件
对象,因为可能没有
文件
文件
仅表示文件系统上的“真实”文件。就操作系统而言,.jar文件中的“文件”只是一些字节


您需要使用获取一个
InputStream
并从中读取。

一旦您将其打包到jar文件中,它就不再是直接文件

试着用英语读它

另请参见


使用
Class.getResourceAsStream
加载jar中的文件:

    InputStream is = Main.class.getResourceAsStream("/items.csv");
    loadValues(is);

将您的
loadValues
方法更改为处理
InputStream
而不是
文件

您可以使用流而不是文件名吗?那么为什么
java.awt.Image appImage32=java.awt.Toolkit.getDefaultToolkit().getImage(Main.class.getResource(“/mcitemcosts/resources/bhmGrass 32.png”)工作正常吗?@Supuhstar:
getResource()
返回一个
URL
。如果查看该值,您会注意到它不仅仅引用一个文件,它是一个
jar:
URL(引用.jar文件中的一个条目)。如果调用
getResource()
并对生成的
URL
调用
openStream()
,那么这就相当于
getResourceAsStream()
。另外,我如何使用
InputStream
读取文件中包含的字符串?@Supuhstar:嗯,您的
loadValues()
最终需要创建一个
FileInputStream
或一个
FileReader
来读取文件。您只需将其替换为传入的
InputStream
(可能包装在
InputStreamReader
)即可
及其
next
方法
    InputStream is = Main.class.getResourceAsStream("/items.csv");
    loadValues(is);