Java 如何每天创建一个名称为当前日期的新目录
这将创建一个今天日期的文件夹,但我想为每天创建一个新文件夹,并将日志文件存储在新文件夹中…意味着每天的文件夹必须有当天的日志文件 我有以下方法来创建文件夹Java 如何每天创建一个名称为当前日期的新目录,java,logging,timestamp,directory,logfiles,Java,Logging,Timestamp,Directory,Logfiles,这将创建一个今天日期的文件夹,但我想为每天创建一个新文件夹,并将日志文件存储在新文件夹中…意味着每天的文件夹必须有当天的日志文件 我有以下方法来创建文件夹 Date dir = new java.util.Date(System.currentTimeMillis()); String baseDir = "/home/gaurav/usr/logs/ESBegin/"; String newDir = createDateBasedDirectory(baseDir, dir); Logge
Date dir = new java.util.Date(System.currentTimeMillis());
String baseDir = "/home/gaurav/usr/logs/ESBegin/";
String newDir = createDateBasedDirectory(baseDir, dir);
Logger logger = Logger.getLogger("MyLog1");
FileHandler fh;
try {
// This block configure the logger with handler and formatter
fh = new FileHandler(newDir+"/data.log");
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
// the following statement is used to log any messages
logger.info(stringifiedJson);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
public静态字符串createDateBasedDirectory(字符串BasedDirectory,日期argDate){
字符串newDir=null;
if(baseDirectory!=null&&argDate!=null){
试一试{
字符串格式=“yyyy-MM-dd”;
DateFormat dateFormatter=新的SimpleDateFormat(格式);
字符串日期=dateFormatter.format(argDate);
文件f=新文件(基本目录);
文件文件[]=f.listFiles();
字符串dir=null;
int baseDirLength=baseDirectory.length();
int checkingLength=baseDirLength+format.length()+3;
int maxSeqNo=0;
对于(int i=0;imaxSeqNo){
maxSeqNo=dirSeqNo;
}
}
}
}
}
字符串currSeq=”“+(maxSeqNo+1);
if(currSeq.length()=1){
currSeq=“0”+currSeq;
}
newDir=baseDirectory+date;
新文件(newDir).mkdir();
}捕获(例外e){
e、 printStackTrace();
}
}
返回newDir;
}
如果我想每天创建一个新文件夹,我应该做什么更改?您可以使用日志框架的功能来执行此操作。例如使用 您可以使用
fileName
参数创建新目录。从:
fileName:要写入的文件的名称。如果文件或其任何父目录不存在,将创建它们
检查当天的目录是否存在,如果不存在则创建,如果存在则返回
public static String createDateBasedDirectory(String baseDirectory, Date argDate) {
String newDir = null;
if (baseDirectory != null && argDate != null) {
try {
String format = "yyyy-MM-dd";
DateFormat dateFormatter = new SimpleDateFormat(format);
String date = dateFormatter.format(argDate);
File f = new File(baseDirectory);
File files[] = f.listFiles();
String dir = null;
int baseDirLength = baseDirectory.length();
int checkingLength = baseDirLength + format.length() + 3;
int maxSeqNo = 0;
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
dir = files[i].toString();
if (dir.length() == checkingLength) {
String existingDirDate = dir.substring(baseDirLength, baseDirLength + 10);
if (date.equalsIgnoreCase(existingDirDate)) {
int dirSeqNo =
Integer.parseInt(dir.substring(baseDirLength + 11, baseDirLength + 10 + 3));
if (dirSeqNo > maxSeqNo) {
maxSeqNo = dirSeqNo;
}
}
}
}
}
String currSeq = "" + (maxSeqNo + 1);
if (currSeq.length() == 1) {
currSeq = "0" + currSeq;
}
newDir = baseDirectory + date;
new File(newDir).mkdir();
} catch (Exception e) {
e.printStackTrace();
}
}
return newDir;
}
这样做(或类似)总是返回当天的目录,并在每天第一次尝试登录之前创建一次。您可以查看一些调度程序。Spring batch有一个。您可以创建一个小方法,在日志尝试时返回当天的文件夹,或者如果它不存在,只创建它。改为配置您的日志记录器!log4j示例:
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
@HalayemAnis我不想更改日志文件名,我只想创建每天的新文件夹。。。。log4j.appender.R=org.apache.log4j.DailyRollingFileAppender这将创建新的日志文件我建议您避免使用SimpleDateFormat
类。它不仅早已过时,而且还出了名的麻烦。今天我们的生活好多了。使用它会更好。但我希望每天都创建一个具有当前日期名称的新文件夹,而不是日志文件…如果我理解正确,您希望每天创建一个新文件夹,在其中创建一个新的日志文件(始终具有相同的名称)?使用RollingFileAppender.else{new File(newDir).mkdir();return todaysDirectoryPath.toUri().toString();}这样做是可能的,例如。。。对只需使用创建目录的代码即可;还这个??或者返回newDir.toString();该else
块处理第一次尝试登录的情况,因此不存在目录,您需要创建它。我想您可以返回newDir.toString()
,但我不确定。试试看。。。最佳做法是返回用于创建目录的字符串
或Uri.toString()
。
/*
* to make sure everyone knows what's going on
* name this method like getOrCreateDailyLogDirectory
*/
public static String createDateBasedDirectory(String baseDirectory, Date argDate) {
String newDir = null;
if (baseDirectory != null && argDate != null) {
try {
String format = "yyyy-MM-dd";
DateFormat dateFormatter = new SimpleDateFormat(format);
String date = dateFormatter.format(argDate);
// check if the directory exists:
String todaysLogDir = baseDirectory + "\\" + date; // create the path as String
// then create a Path (java.nio, alternatives possible)
Path todaysDirectoryPath = Paths.get(todaysLogDir);
// and check if this Path exists
if (Files.exists(todaysDirectoryPath) {
// if present, just return it in order to write (into) a log file there
return todaysDirectoryPath.toUri().toString();
} else {
// create it the way you want and return the path as String
...
}
...
} catch (Exception e) {
e.printStackTrace();
}
}
return newDir;
}