20 package org.matsim.core.controler;
23 import java.io.IOException;
24 import java.nio.file.Files;
25 import java.nio.file.Path;
26 import java.util.Comparator;
27 import java.util.stream.Stream;
29 import org.apache.logging.log4j.LogManager;
30 import org.apache.logging.log4j.Logger;
35 import jakarta.inject.Inject;
96 if (outputPath.endsWith(
"/")) {
97 outputPath = outputPath.substring(0, outputPath.length() - 1);
102 if (createDirectories){
113 String matsimTempDir = System.getProperty(MATSIM_TEMP_DIR_PROPERTY);
114 if (matsimTempDir == null) {
115 matsimTempDir = outputPath +
"/tmp";
117 return matsimTempDir;
129 return outputPath +
"/" + DIRECTORY_ITERS +
"/it." + iteration;
154 if (compression == null) {
165 if (compression == null) {
179 StringBuilder s =
new StringBuilder(outputPath);
190 if (compression == null) {
205 if (compression == null) {
223 log.info(
"Iteration directory " 225 +
" exists already.");
227 log.warn(
"Could not create iteration directory " 238 Path path = Path.of(outputPath +
"/" + DIRECTORY_ITERS);
239 try (Stream<Path> stream = Files.walk(path)) {
241 .sorted(Comparator.reverseOrder())
243 .forEach(File::delete);
244 }
catch (IOException e) {
245 log.warn(
"Could not delete iteration directory " + path +
".");
250 File outputDir =
new File(outputPath);
251 if (outputDir.exists()) {
252 if (outputDir.isFile()) {
254 + outputPath +
" is a file and cannot be replaced by a directory.");
256 if (outputDir.list().length > 0) {
257 switch ( overwriteFiles ) {
258 case failIfDirectoryExists:
262 "The output directory " + outputPath
264 + outputDir.getAbsolutePath()
266 +
" already exists and is not empty!" 267 +
" Please either delete or empty the directory or" 268 +
" configure the services via setOverwriteFileSetting()" 269 +
" or the \"overwriteFiles\" parameter of the \"services\" config group.");
270 case overwriteExistingFiles:
272 log.warn(
"###########################################################");
273 log.warn(
"### THE CONTROLER WILL OVERWRITE FILES IN:");
274 log.warn(
"### " + outputPath);
275 log.warn(
"### full path: " + outputDir.getAbsolutePath());
276 log.warn(
"###########################################################");
279 case deleteDirectoryIfExists:
284 log.info(
"###########################################################");
285 log.info(
"### THE CONTROLER WILL DELETE THE EXISTING OUTPUT DIRECTORY:");
286 log.info(
"### " + outputPath);
287 log.warn(
"### full path: " + outputDir.getAbsolutePath());
288 log.info(
"###########################################################");
298 if (!outputDir.exists() && !outputDir.mkdirs()) {
300 "The output directory path " + outputPath
301 +
" could not be created. Check pathname and permissions! Full path: " +
new File(outputPath).getAbsolutePath());
305 if (!tmpDir.mkdir() && !tmpDir.exists()) {
310 if (!itersDir.mkdir() && !itersDir.exists()) {
313 +
" could not be created.");
static final String DIRECTORY_ITERS
static void deleteDirectoryRecursively(Path path)
final String getIterationFilename(final int iteration, final String filename)
final String getOutputFilenameWithOutputPrefix(final String filename)
final ControllerConfigGroup.CompressionType defaultCompressionType
final String getOutputFilename(Controler.DefaultFiles file)
OutputDirectoryHierarchy(String outputPath, OverwriteFileSetting overwriteFiles, ControllerConfigGroup.CompressionType defaultCompressionType)
void deleteIterationDirectory()
final void createIterationDirectory(final int iteration)
final String getIterationPath(final int iteration)
OutputDirectoryHierarchy(String outputPath, String runId, OverwriteFileSetting overwriteFiles, ControllerConfigGroup.CompressionType defaultCompressionType)
static final String MATSIM_TEMP_DIR_PROPERTY
String getOutputFilename(String filename, ControllerConfigGroup.CompressionType compression)
OverwriteFileSetting getOverwriteFileSetting()
OutputDirectoryHierarchy(Config config)
static final String DIRECTORY_ITERS
final String getOutputFilename(Controler.DefaultFiles file, ControllerConfigGroup.CompressionType compression)
CompressionType getCompressionType()
String getIterationFilename(int iteration, String filename, ControllerConfigGroup.CompressionType compression)
OverwriteFileSetting overwriteFiles
final String getOutputFilename(final String filename)
final ControllerConfigGroup controller()
final String getTempPath()
String getOutputDirectory()
final String getIterationFilename(int iteration, Controler.DefaultFiles file)
OutputDirectoryHierarchy(String outputPath, String runId, OverwriteFileSetting overwriteFiles, boolean createDirectories, ControllerConfigGroup.CompressionType compressionType)
final String getIterationFilename(int iteration, Controler.DefaultFiles file, ControllerConfigGroup.CompressionType compression)