Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何每天创建一个名称为当前日期的新目录_Java_Logging_Timestamp_Directory_Logfiles - Fatal编程技术网

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;
}