Файловый ввод-вывод, создание пути с помощью конструкторской переменной - PullRequest
0 голосов
/ 12 января 2019

Как создать путь и файл, используя переменные конструктора

Я пишу простое приложение для регистрации в моей школе. Когда я инициализирую переменную name для регистрации, приложение работает без проблем.

Однако, когда я создаю экземпляр с другим именем, заданным в конструкторе, программа переходит к переменной экземпляра, чтобы создать пустой файл журнала перед созданием нового файла журнала.

Также, когда я повторно запускаю приложение, оно всегда выдает исключение, файл уже найден, но, насколько я вижу, это должно быть решено в цикле в моем коде.

Я чувствую, что упускаю что-то из механики Пути или что-то еще, но я не могу понять это.

private String name;
private int logLevel;
private Path path = checkPreviousVersions();


protected FlexibleLogger(String name,int logLevel) throws IOException {
    this.logLevel = logLevel;
    this.name=name;
        }

public Path checkPreviousVersions() throws IOException{

    List<String> results = new ArrayList<>();
    List<String> fresults = new ArrayList<>();
    File[] files = new File("./logs").listFiles();

    for (File file: files) {
        if (file.isFile()) {
            results.add(file.getName());
        }
    }

    for (String result: results){
        fresults.add(result.replace(result,result.substring(0,result.indexOf("."))));
    }

    if (fresults.contains(name)) {
        Path mypath = Paths.get("./logs/" + name + ".log");
        String s = "=======================" + dateFormatter() + "=======================" + "\n";
        writeToFile(s);
        return mypath;


    } else {
        Path mypath = Paths.get("./logs/" + name + ".log");
        Files.createFile(mypath);
        return mypath;

    }

}

Ожидаемый результат - один файл для первого создания и новый файл при каждом изменении имени. Если имя не изменилось, следует обновить существующий файл.

Фактическим результатом является создание двух файлов, одного с нулевым значением и одного с переменной имени конструктора. Во втором цикле с тем же именем выдается ошибка «FileAlreadyExists».

Спасибо за любые советы.

1 Ответ

0 голосов
/ 12 января 2019

Похоже, слишком много кода для такой логики. Нет необходимости получать все файлы в каталоге.

Вот простой способ: - создать новый файл ("./ logs", имя) - проверьте, существует ли файл: if (file.exists ()) - если его не существует, создайте его - добавь к нему свой текст

Вот и все.

...