web-dev-qa-db-ja.com

プロパティファイルで整数を読み取れないのはなぜですか?

Javaに構成ファイルを書き込もうとしていますが、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();
    }

}
_
10
Johnathan Au

問題を再現するための自己完結型の例を提供できますか?

すみません、わかりません

走ると

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
16
Peter Lawrey

違いは

root= some root #STRING

port=8020  #INTEGER

したがって、ルートプロパティを取得するには、これを行うことができます。

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

整数の場合

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

Javaプロパティクラスのしくみ

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として配置しています-それが彼のバージョンで機能する理由です。

これを読んでください:getとgetPropertyの違い

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.
0
Pravin