Properties prop=new Properties();
try {
FileInputStream fs=new FileInputStream("config.properties");
prop.load(fs);
System.out.println(prop.getProperty("cls1"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
以上代码出现异常:
java.io.FileNotFoundException: config.properties (系统找不到指定的文件。)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.TestProperties.main(TestProperties.java:15)
9 个解决方案
#1
new FileInputStream("config.properties");
这个文件你放错了位置,你可以考虑
1 放在项目的根上
2 用绝对路径,比如 c:/config.properties
这个文件你放错了位置,你可以考虑
1 放在项目的根上
2 用绝对路径,比如 c:/config.properties
#2
你的类文件和你刚才的代码保存的地方放同一个路径下就可以了
#3
我的properties文件放在SRC目录中和放在包中都试过了,都不行.
文件名是复制粘贴的应该没有问题
文件名是复制粘贴的应该没有问题
#4
我的意思是你的类文件和properties文件要放同一个目录下
要不你就按一楼的方法就可以了
要不你就按一楼的方法就可以了
#5
properties这东西,有点小麻烦。
读取路径这个玩艺是比较棘手的东西。
最简单的处理方式是在环境变量里面定义一个目录,然后把properties放在那个目录里面。在Java中读取环境变量,然后拼出来完整路径。
这个方法的问题在于发布比较麻烦,要控制系统来完成这些事情。
web应用可以把properties放在web应用路径下,可以通过文件或Http读取。问题在于这相当于对用户暴露程序配置,敏感数据不适合。
一般采用的办法是跟class文件放在一起package中。如果用File去读取,结果必然很惨痛。因为实际上class的路径不固定。所以File的方式是不适合读取package中的properties的。
如果选择了把properties文件放在package中,那么就用classloader的getResouseAsStream那组方法获得输入流。这个方法的好处是即便package是在jar中,也一样能够读取。确定是如果配置需要修改,那么在jar中不是很方便;而且需要控制classloader(并不是每个classloader都一样的,容器中,一般情况下,系统的和应用的读取的位置不同,所以需要控制一下,用那个,或者都用。)。但是作为产品或组件,其优势也是明显的,所以目前看到的大多数框架都是这么放properties的。(我没考察大多数到底是多少:))
楼主的这个方法是最恐怖的。没有任何路径限制。那么以为这文件在当前路径。当前路径,也就是启动路径。换句话说:假如文件在/opt/myproject/config/目录下,而启动路径是/home/user/,那么实际上是在/home/user/下找这个文件。启动路径,也就是运行程序时,控制台的当前路径。启动路径可以从system的getProperty()方法获得。
在eclipse下,启动路径默认是项目根路径。比如项目Demo在d:\workspace\Demo下,那么启动路径就是这个。
大致情况是这样的。细节楼主慢慢玩。
读取路径这个玩艺是比较棘手的东西。
最简单的处理方式是在环境变量里面定义一个目录,然后把properties放在那个目录里面。在Java中读取环境变量,然后拼出来完整路径。
这个方法的问题在于发布比较麻烦,要控制系统来完成这些事情。
web应用可以把properties放在web应用路径下,可以通过文件或Http读取。问题在于这相当于对用户暴露程序配置,敏感数据不适合。
一般采用的办法是跟class文件放在一起package中。如果用File去读取,结果必然很惨痛。因为实际上class的路径不固定。所以File的方式是不适合读取package中的properties的。
如果选择了把properties文件放在package中,那么就用classloader的getResouseAsStream那组方法获得输入流。这个方法的好处是即便package是在jar中,也一样能够读取。确定是如果配置需要修改,那么在jar中不是很方便;而且需要控制classloader(并不是每个classloader都一样的,容器中,一般情况下,系统的和应用的读取的位置不同,所以需要控制一下,用那个,或者都用。)。但是作为产品或组件,其优势也是明显的,所以目前看到的大多数框架都是这么放properties的。(我没考察大多数到底是多少:))
楼主的这个方法是最恐怖的。没有任何路径限制。那么以为这文件在当前路径。当前路径,也就是启动路径。换句话说:假如文件在/opt/myproject/config/目录下,而启动路径是/home/user/,那么实际上是在/home/user/下找这个文件。启动路径,也就是运行程序时,控制台的当前路径。启动路径可以从system的getProperty()方法获得。
在eclipse下,启动路径默认是项目根路径。比如项目Demo在d:\workspace\Demo下,那么启动路径就是这个。
大致情况是这样的。细节楼主慢慢玩。
#6
楼主的类是不是打包了啊
要和包放在同一级目录下
要和包放在同一级目录下
#7
如果文件是放在src文件夹下面的,
楼主可以尝试把FileInputStream fs=new FileInputStream("config.properties");
替换成InputStream fs = this.getClass().getResourceAsStream("config.properties");
楼主可以尝试把FileInputStream fs=new FileInputStream("config.properties");
替换成InputStream fs = this.getClass().getResourceAsStream("config.properties");
#8
你的类文件和properties文件要放同一个目录下或者在根目录下建个config目录,把配置文件放进去
#9
哇!这个强啊!!终于解决了,哈哈!!
#1
new FileInputStream("config.properties");
这个文件你放错了位置,你可以考虑
1 放在项目的根上
2 用绝对路径,比如 c:/config.properties
这个文件你放错了位置,你可以考虑
1 放在项目的根上
2 用绝对路径,比如 c:/config.properties
#2
你的类文件和你刚才的代码保存的地方放同一个路径下就可以了
#3
我的properties文件放在SRC目录中和放在包中都试过了,都不行.
文件名是复制粘贴的应该没有问题
文件名是复制粘贴的应该没有问题
#4
我的意思是你的类文件和properties文件要放同一个目录下
要不你就按一楼的方法就可以了
要不你就按一楼的方法就可以了
#5
properties这东西,有点小麻烦。
读取路径这个玩艺是比较棘手的东西。
最简单的处理方式是在环境变量里面定义一个目录,然后把properties放在那个目录里面。在Java中读取环境变量,然后拼出来完整路径。
这个方法的问题在于发布比较麻烦,要控制系统来完成这些事情。
web应用可以把properties放在web应用路径下,可以通过文件或Http读取。问题在于这相当于对用户暴露程序配置,敏感数据不适合。
一般采用的办法是跟class文件放在一起package中。如果用File去读取,结果必然很惨痛。因为实际上class的路径不固定。所以File的方式是不适合读取package中的properties的。
如果选择了把properties文件放在package中,那么就用classloader的getResouseAsStream那组方法获得输入流。这个方法的好处是即便package是在jar中,也一样能够读取。确定是如果配置需要修改,那么在jar中不是很方便;而且需要控制classloader(并不是每个classloader都一样的,容器中,一般情况下,系统的和应用的读取的位置不同,所以需要控制一下,用那个,或者都用。)。但是作为产品或组件,其优势也是明显的,所以目前看到的大多数框架都是这么放properties的。(我没考察大多数到底是多少:))
楼主的这个方法是最恐怖的。没有任何路径限制。那么以为这文件在当前路径。当前路径,也就是启动路径。换句话说:假如文件在/opt/myproject/config/目录下,而启动路径是/home/user/,那么实际上是在/home/user/下找这个文件。启动路径,也就是运行程序时,控制台的当前路径。启动路径可以从system的getProperty()方法获得。
在eclipse下,启动路径默认是项目根路径。比如项目Demo在d:\workspace\Demo下,那么启动路径就是这个。
大致情况是这样的。细节楼主慢慢玩。
读取路径这个玩艺是比较棘手的东西。
最简单的处理方式是在环境变量里面定义一个目录,然后把properties放在那个目录里面。在Java中读取环境变量,然后拼出来完整路径。
这个方法的问题在于发布比较麻烦,要控制系统来完成这些事情。
web应用可以把properties放在web应用路径下,可以通过文件或Http读取。问题在于这相当于对用户暴露程序配置,敏感数据不适合。
一般采用的办法是跟class文件放在一起package中。如果用File去读取,结果必然很惨痛。因为实际上class的路径不固定。所以File的方式是不适合读取package中的properties的。
如果选择了把properties文件放在package中,那么就用classloader的getResouseAsStream那组方法获得输入流。这个方法的好处是即便package是在jar中,也一样能够读取。确定是如果配置需要修改,那么在jar中不是很方便;而且需要控制classloader(并不是每个classloader都一样的,容器中,一般情况下,系统的和应用的读取的位置不同,所以需要控制一下,用那个,或者都用。)。但是作为产品或组件,其优势也是明显的,所以目前看到的大多数框架都是这么放properties的。(我没考察大多数到底是多少:))
楼主的这个方法是最恐怖的。没有任何路径限制。那么以为这文件在当前路径。当前路径,也就是启动路径。换句话说:假如文件在/opt/myproject/config/目录下,而启动路径是/home/user/,那么实际上是在/home/user/下找这个文件。启动路径,也就是运行程序时,控制台的当前路径。启动路径可以从system的getProperty()方法获得。
在eclipse下,启动路径默认是项目根路径。比如项目Demo在d:\workspace\Demo下,那么启动路径就是这个。
大致情况是这样的。细节楼主慢慢玩。
#6
楼主的类是不是打包了啊
要和包放在同一级目录下
要和包放在同一级目录下
#7
如果文件是放在src文件夹下面的,
楼主可以尝试把FileInputStream fs=new FileInputStream("config.properties");
替换成InputStream fs = this.getClass().getResourceAsStream("config.properties");
楼主可以尝试把FileInputStream fs=new FileInputStream("config.properties");
替换成InputStream fs = this.getClass().getResourceAsStream("config.properties");
#8
你的类文件和properties文件要放同一个目录下或者在根目录下建个config目录,把配置文件放进去
#9
哇!这个强啊!!终于解决了,哈哈!!