java中属性文件的路径

java中属性文件的路径,java,resources,properties,jar,Java,Resources,Properties,Jar,我有一个属性文件,它在一个默认包中,我在其中使用属性文件的类也在同一个默认包中。如果只使用文件名而不使用任何路径,则会出现错误。显然,这是不正确的,因为我应该给出某种指向tat文件的路径。我将构建应用程序,使其成为一个jar文件,因此我应该如何给出属性文件应该进入该jar文件的路径。我正在使用Netbeans IDE 编辑 使用getClass().getResourceAsStream(“foo.properties”) 但是请注意,不鼓励使用默认包(以上内容适用于任何包) 您的代码无法工作,

我有一个属性文件,它在一个默认包中,我在其中使用属性文件的类也在同一个默认包中。如果只使用文件名而不使用任何路径,则会出现错误。显然,这是不正确的,因为我应该给出某种指向tat文件的路径。我将构建应用程序,使其成为一个jar文件,因此我应该如何给出属性文件应该进入该jar文件的路径。我正在使用Netbeans IDE

编辑

使用
getClass().getResourceAsStream(“foo.properties”)

但是请注意,不鼓励使用默认包(以上内容适用于任何包)


您的代码无法工作,因为
FileInputStream(..)
使用了相对于当前用户目录的路径(请参阅
java.io.File
文档)。因此,它在
/home/usr/
c:\documents and settings\usr
中查找
foo.properties
。由于您的
.properties
文件位于类路径上,因此您可以通过
Class.getResourceAsStream(..)
方法读取它。

您是试图从当前工作目录获取属性文件,还是试图将其作为资源获取?听起来你应该使用

InputStream is = getClass().getResourceAsStream(filename);
properties.load(is);
从当前目录加载文件的步骤

properties.load(new FileInputStream(filename));

我猜你真正想要的是这个

try {            
    Properties pro = new Properties();
    pro.load(new FileInputStream("pos_config.properties"));
    String pos_id = pro.getProperty("pos_id");
    try {
        global_variables.station_id = Integer.parseInt(pos_id);
    } catch(Exception e) {
        global_variables.station_id = 0;
    }
    String shop_type = pro.getProperty("shop_type");
    try {
        global_variables.shop_type = Integer.parseInt(shop_type);
    } catch(Exception e) {
        global_variables.shop_type = 0;
    }
} catch (IOException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}

无论如何,我建议将所有属性文件放在资源文件夹中

在Eclipse中,您可以使用以下内容创建源文件夹:

右键单击->新建->源文件夹

我打赌Netbeans中也有类似的东西。把你所有的财产文件都放在那里。稍后,您可以使用以下代码访问它们:

AnyClass.class.getResource("/image.png")

因此,对于您的特定问题,您可以这样访问它:

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));

正如其他人所指出的,如果您希望能够从jar加载它,那么应该从类路径而不是作为文件加载它。你想要的是方法还是方法。但是,使用
getClass().getResourceAsStream(“pos_config.properties”)
是危险的,因为您使用的是相对于给定类解析的路径,并且子类可能会更改解析它的位置。因此,最安全的做法是在jar中命名一个绝对路径:

getClass().getResourceAsStream("/pos_config.properties")
或者更好的方法是使用类文字而不是getClass():

这将不会编译:

pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));
正确使用:

pro.load(YourClass.class.getResourceAsStream("/pos_config.properties")));

在静态方法中,我使用

ClassLoader.getSystemResourceAsStream(“name.properties”)


请发布您用来访问属性文件的代码。@little bunny foo foo:检查我的编辑。.我不使用netbeans,但如果您在netbeans中右键单击该文件,您是否有类似于
build path>include
代码审阅注释:您的代码和回答此问题的大多数代码示例似乎都无法完成关闭输入流。这可能会给您带来问题。是的,我正在尝试从当前目录获取它。我正在使用publicstaticvoidmain(),那么如何在静态上下文中使用这个非静态方法呢?当您使用
properties
引用时,您可以使用PropertiesgetResourceAsInputStream()->getResourceAsStream()的非静态方法您的代码片段只使用工作目录,而不是类路径。问题是属性文件将绑定到一个jar中,因此需要从类路径加载它。当我将文件从默认包移动到一个新包并使用类似
getClass().class.getResource(“/properties/pos\u config.properties”)
的内容时,我解决了这个问题。
pro.load(new FileInputStream(YourClass.class.getResource("/pos_config.properties")));
pro.load(YourClass.class.getResourceAsStream("/pos_config.properties")));