JAVA我的日志文件只写出第一个变量?

时间:2017-01-19 20:33:29

标签: java

我是Java编程的新手,我目前正在编写一个java web应用程序。我正在尝试在用户创建房间时写出日志,这是我的代码。

public class RoomLog{

private static RoomLog instance = new RoomLog();

private RoomLog() {

    try {

        fWriter = new FileWriter("RLog.txt", true);
        buffWriter = new BufferedWriter(fWriter);
        newLine = System.getProperty("line.separator"); 

    }

    catch(IOException ex) {

    }
}
    protected void finalize(){
    try {
        buffWriter.close();
        fWriter.close();

    } catch  (IOException ex) {

    }   
    }


    public static RoomLog getInstance(){
        return instance;

    }

    BufferedWriter buffWriter;
    FileWriter fWriter;
    static String newLine;


    public void Log(String msg){
        try {

            buffWriter.write(msg);
            buffWriter.write(newLine);
            buffWriter.flush();
        }catch (IOException ex) {
            System.out.println("log exc");
        }
    }

}

那是我的房间日志代码,这是我在Servlet中的代码:

    RoomLog rLog = RoomLog.getInstance();
    rLog.Log(aRoom.toString());

最后,这是我的Room类中的代码,用于尝试获取所有属性。

@Override
public String toString(){
return String.format(getRoomName(), getRoomCode(), getRoomCapacity(),       getNumOfLights(), getBuildingCode());
}

但由于某种原因,它只打印roomName而不是链接到它的所有其他变量。

3 个答案:

答案 0 :(得分:2)

我相信您使用format是不对的。第一个论点应该 是一个格式字符串,然后可以有一个可变数量的参数(vararg) 这将为格式字符串中标出的位置提供值。

所以你的方法应该是

@Override
public String toString(){
    return String.format("%s %d, %s, %d %s"
        , getRoomName()
        , getRoomCode()
        , getRoomCapacity()
        , getNumOfLights()
        , getBuildingCode());
}

注意:我假设这五种方法的返回类型分别是: String,int,String,int,String。

有关详细信息,请参阅本教程:

https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

答案 1 :(得分:1)

String.format()方法的第一个参数是格式字符串。您似乎忽略了这一点,使该方法认为您的getRoomName()参数是格式字符串。

答案 2 :(得分:0)

使用StringBuilder代替String.format

StringBuilder sb = new StringBuilder();
sb.append(getRoomName()).append(getRoomCode());
sb.append(getRoomCapacity()).append(getNumOfLights());
sb.append(getBuildingCode());
return sb.toString();