我是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而不是链接到它的所有其他变量。
答案 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();