我是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();