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,而不是链接到它的所有其他变量。

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

所以你的方法应该是

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

注意:我假设这五种方法的返回类型分别是:字符串、整数、字符串、整数、字符串。

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

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

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

使用 StringBuilder 而不是 String.format

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

相关内容

最新更新