In der Tat…
Auch auf die Gefahr hin, noch mehr zu verwirren oder nichts sinnvolles beizutragen, ein paar Codeschnipsel, die bestimmte Aufgaben erledigen:
- Aus einer Datei, die das besagte Format hat, also einen Verzeichnisnammen und eine Nummer enthält, kann mit
readInputInfo
einInputInfo
-Objekt gelesen werden, wo diese Infos drinstecken - Mit ein paar utility-Funktionen kann man aus den Namen von Dateien (die das angedeutete Format haben) diese Informationen extrahieren:
- Diese Nummer (1 oder 2)
- Das erste Datum
- Das zweite Datum
- Mit der
fetchRelevantFiles
-Methode kann man sich die Dateien auflisten lassen, die relevant sind
Alleine schon den Task in solche Building-Blocks aufzuteilen kann helfen. Mit JFreeChart hat das jetzt freilich nichts zu tun, aber … das könnte der nächste Schritt sein.
So weit erstmal. Muss da jetzt noch irgendwas nach Datum sortiert werden oder so?
package bytewelt;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
public class DateianzeigeUnklareFrage
{
public static void main(String[] args) throws IOException
{
File inputFile = new File("./FileList.txt");
InputInfo inputInfo = readInputInfo(inputFile);
List<File> relevantFiles =
fetchRelevantFiles(inputInfo.directoryName, inputInfo.number,
LocalDate.of(2017, 6, 23));
for (File file : relevantFiles)
{
System.out.println(file);
}
}
private static class InputInfo
{
String directoryName;
int number;
}
private static InputInfo readInputInfo(File file) throws IOException
{
try (BufferedReader br = new BufferedReader(new FileReader(file)))
{
String directoryName = br.readLine();
String numberString = br.readLine();
InputInfo inputInfo = new InputInfo();
inputInfo.directoryName = directoryName;
inputInfo.number = tryParseInt(numberString);
return inputInfo;
}
}
static List<File> fetchRelevantFiles(String directoryName, int number,
LocalDate date)
{
List<File> relevantFiles = new ArrayList<File>();
List<File> files = listFiles(directoryName);
for (File file : files)
{
String fileName = file.getName();
int fileNumber = extractNumberFromFileName(fileName);
LocalDate startDate = extractStartDateFromFileName(fileName);
LocalDate endDate = extractEndDateFromFileName(fileName);
if (fileNumber == number
&& !startDate.isAfter(date)
&& !endDate.isBefore(date))
{
relevantFiles.add(file);
}
}
return relevantFiles;
}
private static LocalDate extractStartDateFromFileName(String name)
{
int lastUnderscoreIndex = name.lastIndexOf('_');
if (lastUnderscoreIndex == -1)
{
System.out.println("Invalid file name: " + name);
return null;
}
int prevUnderscoreIndex =
name.lastIndexOf('_', lastUnderscoreIndex - 1);
if (prevUnderscoreIndex == -1)
{
System.out.println("Invalid file name: " + name);
return null;
}
String startDateString =
name.substring(prevUnderscoreIndex + 1, lastUnderscoreIndex);
return LocalDate.parse(startDateString);
}
private static LocalDate extractEndDateFromFileName(String name)
{
int lastDotIndex = name.lastIndexOf('.');
if (lastDotIndex == -1)
{
System.out.println("Invalid file name: " + name);
return null;
}
int lastUnderscoreIndex = name.lastIndexOf('_');
if (lastUnderscoreIndex == -1)
{
System.out.println("Invalid file name: " + name);
return null;
}
String endDateString =
name.substring(lastUnderscoreIndex + 1, lastDotIndex);
return LocalDate.parse(endDateString);
}
private static int extractNumberFromFileName(String name)
{
int dashIndex = name.indexOf('-');
if (dashIndex == -1)
{
System.out.println("Invalid file name: " + name);
return -1;
}
int numberEndIndex = name.indexOf('_', dashIndex + 1);
if (numberEndIndex < 0)
{
System.out.println("Invalid file name: " + name);
return -1;
}
String numberString = name.substring(dashIndex + 1, numberEndIndex);
return tryParseInt(numberString);
}
private static int tryParseInt(String string)
{
try
{
return Integer.parseInt(string.trim());
}
catch (NumberFormatException e)
{
System.out.println("Invalid number: " + string);
return -1;
}
}
private static List<File> listFiles(String directoryName)
{
File directory = new File(directoryName);
File[] filesArray = directory.listFiles();
List<File> files = new ArrayList<File>();
for (File file : filesArray)
{
if (!file.isDirectory())
{
files.add(file);
}
}
return files;
}
private static void someBasicTests()
{
String fileName = "export_test_practise-1_2017-06-23_2017-06-23.csv";
System.out.println(extractNumberFromFileName(fileName));
System.out.println(extractStartDateFromFileName(fileName));
System.out.println(extractEndDateFromFileName(fileName));
System.out.println(listFiles("C:/Develop"));
}
}