单例模式之应用示例———编制日志类
编制日志类。一般来说,应用程序都有日志文件,记录一些执行信息。在windows系统下,无论多次双击记事本文件,都只会出现一个窗口。
此功能正是利用单例对象来实现的。
不多说上代码:
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
public class FileLogger
{
private String path="D:/IDEA plugins/log.txt";//目的路径
private FileOutputStream out=new FileOutputStream(path,true);
// 上面的true意为 out从日志文件尾部开始添加纪录!重启后新日志自动追加到末尾,原信息不变!
private FileLogger()throws Exception //日志类
{
System.out.println("这是一个新实例!");
}
private static class My //单例模式 静态 内部 类
{
private static FileLogger fileLogger;
static
{
try
{
fileLogger = new FileLogger();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
public static FileLogger getFileLogger() //外部引用类,获取内部信息
{
return My.fileLogger;
}
// 文本的输入
public void write(String msg)
{
try
{
Calendar c=Calendar.getInstance();
int y=c.get(Calendar.YEAR);
int m=c.get(Calendar.MONTH);
int d=c.get(Calendar.DAY_OF_MONTH);
int hh=c.get(Calendar.HOUR);
int mm=c.get(Calendar.MINUTE);
int ss=c.get(Calendar.SECOND);
String strTime="";
strTime= strTime.format("time:%d-%02d-%02d %02d-%02d-%02d\r\n",y,m,d,hh,mm,ss);
String strContent="content:\r\n"+msg+"\r\n";
byte buf[]=strTime.getBytes("gbk");//设置编码方式
out.write(buf);
buf=strContent.getBytes("gbk");
out.write(buf);//此write非上面方法名write,此是(FileOutoutStream) out 的子方法
out.flush();
} catch (Exception e)
{
e.printStackTrace();
}
}
public void close()
{
try
{
out.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
下面编写一个测试类:
public class itsTest
{
public static void main(String[] args)
{
// 获得日志单例对象
FileLogger obj=FileLogger.getFileLogger();
obj.write("hello!");
obj.write("nihao!");
obj.write("利好刘!");
obj.close();
System.out.println("结束!");
}
}
运行:
这是一个新实例!
结束!
Process finished with exit code 0
目的文件已成功生成!
作者:Mark
出处:http://www.cnblogs.com/Mark_blog/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。