java设计模式:单例模式之应用示例———编制日志类

 

编制日志类。一般来说,应用程序都有日志文件,记录一些执行信息。在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

目的文件已成功生成!

posted @ 2018-03-16 10:25  TinyMark  阅读(555)  评论(0编辑  收藏  举报