从另一个文件夹读取Properties文件时为空指针

时间:2016-11-10 09:14:14

标签: java properties-file

我的应用程序将检查属性文件是否存在,如果不存在则创建一个。

try{
        // create new file

        String path="c:\\temp\\LaserController.properties";
        File file = new File(path);
        String comport = "Comport=COM1";
        String Parity = "parity=none";
        String baud = "baud=9600";
        String Stopbits = "StopBits=0";
        String databits = "DataBits=8";
           // if file doesnt exists, then create it
           if (!file.exists()) {
               file.createNewFile();



           FileWriter fw = new FileWriter(file.getAbsoluteFile());
           BufferedWriter bw = new BufferedWriter(fw);
           // write in file
           bw.write(comport);
           bw.newLine();
           bw.write(Parity);
           bw.newLine();
           bw.write(baud);
           bw.newLine();
           bw.write(Stopbits);
           bw.newLine();
           bw.write(databits);
           // close connection
           bw.close();
           }

但是当我尝试读取这样的属性文件时,我得到一个Null指针。

else {
           Properties prop = new Properties();


            InputStream input = LaserControllerUI.class.getResourceAsStream("c:\\temp\\LaserController.properties");


            // load a properties file
            prop.load(input);

            // get the property value and print it out
            System.out.println(prop.getProperty(Comport+"comport"));
            System.out.println(prop.getProperty("Parity"));
            System.out.println(prop.getProperty("Baud"));
            input.close();

        }
     }catch(Exception e){
         System.out.println(e);
     }
}       

它在InputStream input行失败,但我不知道为什么。该文件存在,我的应用程序可以访问它,因为它首先将它放在那里。我做错了什么?

该文件必须位于用户可以访问的位置以更改参数。

enter image description here

3 个答案:

答案 0 :(得分:5)

getResourceAsStream方法需要"类路径相对"名称。您正在提供绝对路径。请尝试使用FileInputStream

E.g:

InputStream input = new FileInputStream("c:\\temp\\LaserController.properties");

答案 1 :(得分:3)

我建议使用Properties.save()来确保在可以阅读时以格式编写。

我建议您查看文本文件以查看所写的内容。

BTW属性区分大小写。你写的

Comport
parity
baud

但你读了

Comport+"comport"
Parity
Baud

所以他们都是null

答案 2 :(得分:0)

将该文件移至资源文件夹或将该文件夹添加为资源文件夹

的getClass()getClassLoader()的getResourceAsStream(" LaserController.properties&#34)。