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();
}
}
_
問題を再現するための自己完結型の例を提供できますか?
すみません、わかりません
走ると
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
違いは
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.