为什么我不能在属性文件中读取整数?

时间:2012-10-12 11:42:05

标签: java file-io properties

我正在尝试用Java编写一个configs文件,并将我的端口号放在其中,以便我的HTTP Web服务器连接到根路径。

配置文件:

root= some root
port=8020

我正在尝试访问这样的属性:

FileInputStream file = new FileInputStream("config.txt");       
//loading properties from properties file        
config.load(file);

int port = Integer.parseInt(config.getProperty("port"));   
System.out.println("this is port " + port);

如果我使用getProperty方法中的单个参数执行此操作,则会出现此错误

"java.lang.NumberFormatException: null"

但是,如果我像这样访问它

int port = Integer.parseInt(config.getProperty("port", "80"));

它有效。

此外,它适用于config.getProperty("root");所以我不明白......

编辑:

import java.net.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.*;

public class Server
{


    public static void main(String[] args) throws Exception
    {
        boolean listening = true;
        ServerSocket server = null;     
        Properties config = new Properties();
        int port = 0;
        try
        {              
            //Reading properties file
            FileInputStream file = new FileInputStream("config.txt");       
            //loading properties from properties file        
            config.load(file);

            port = Integer.parseInt(config.getProperty("port"));   
            System.out.println("this is port " + port);


            System.out.println("Server binding to port " + port);
            server = new ServerSocket(port);



        }
        catch(FileNotFoundException e)
        {
            System.out.println("File not found: " + e);
        }
        catch(Exception e)
        {
            System.out.println("Error: " + e);
            System.exit(1);
        }

        System.out.println("Server successfully binded to port " + port);

        while(listening)
        {
            System.out.println("Attempting to connect to client");
            Socket client = server.accept();
            System.out.println("Successfully connected to client");
            new HTTPThread(client, config).start();
        }

        server.close();
    }

}

3 个答案:

答案 0 :(得分:16)

  

你能提供一个自包含的例子来重现你的问题吗?

     

抱歉,我不明白

当我跑步时

Properties prop = new Properties();
prop.setProperty("root", "some root");
prop.setProperty("port", "8020");
prop.store(new FileWriter("config.txt"), "test");

Properties config = new Properties();
//loading properties from properties file
config.load(new FileReader("config.txt"));

int port = Integer.parseInt(config.getProperty("port"));
System.out.println("this is port " + port);

我得到了

this is port 8020

答案 1 :(得分:7)

差异

root= some root #STRING

port=8020  #INTEGER

所以要获得root属性,你可以这样做..

props.getProperty("root"); //Returns a String

表示整数

props.get("port"); //Returns a Object

Java Properties类的工作原理

public String getProperty(String key) {
    Object oval = super.get(key);
    String sval = (oval instanceof String) ? (String)oval : null;
    return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
    }

//顺便说一句。 Peter Lawrey将端口设置为String - 这就是为什么它的版本适用于他的版本。

请阅读: difference between get & getProperty

答案 2 :(得分:0)

properties.get("key) - should work for any object type - convert it later to a specific type
properties.getProperty("key") -- ll always get a string regardless of a value type in the properties.