Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Java сравнить и изменить время и дату в файле

#java


Есть java class, в котором в map записаны элементы их время и дата. Приблизительно
вот так:

new Map ()
.put("time1","2015-01-25T03:01:00") 


Нужен метод который будет находить старую дату (before(now)), и менять на новую (буквально
на 2,3 дня вперед)

Буду рад любым советам.

Сначала пробовал просто загрузить файл и изменить данные: (в коде очень много лишнего,
но работает)

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Scanner;
    import java.util.ArrayList;
    import java.util.List;
    import java.io.BufferedWriter;

public class FileReplace {
    List lines = new ArrayList();
    String line = null;

    public void  doIt() {
        try {
            File f1 = new File("TFile.java");
            FileReader fr = new FileReader(f1);
            BufferedReader br = new BufferedReader(fr);
            while ((line = br.readLine()) != null) {
                if (line.contains("2015-01-25T03:01:00"))
                    line = line.replace("2015-01-25T03:01:00", "2016-01-06T08:01:00 ");
                lines.add(line);
            }
            fr.close();
            br.close();

            FileWriter fw = new FileWriter(f1);
            BufferedWriter out = new BufferedWriter(fw);
            for(String s : lines)
                 out.write(s);
            out.flush();
            out.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String args[]) {
        FileReplace fr = new FileReplace();
        fr.doIt();
    }
    }


Потом думаю как то сравнить даты, как то так: (только наброски )

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
               Date date1 = sdf;
             //  Date date2 = ;   data from the file

               if (date1.after(date2)) {

          date2 = data2.replace() // some random future data 

               }


Не могу все до кучи свести, и еще нужно достать время и дату с файла, но как писал
в начале, она вот так записана. 

new Map ()
.put("time1","2015-01-25T03:01:00") 

    


Ответы

Ответ 1



нужно достать время и дату с файла import java.nio.file.*; import java.util.*; import java.io.*; public class Definition_Of_The_File_Creation_Date { public static void main(String[] args) { /* * Вместо / подстовляем путь к файлу или коталогу, используя статистический * метод parsingFolder получаем "карту" заполненую ключём - имя файла (Строка) и * значением даты последнего изменения файла (строка) */ Map colection = parsingFolder("/"); // получаем все ключи нашей колекции Set nameFile = colection.keySet(); // выводим имя файла и его дату for(String name : nameFile){ System.out.println("Имя: " + name + " DATA: " + colection.get(name)); } /* * Можно поменять все ключи методом colection.replace("ключ", "Новое значение"), * Также строку можно разбить java.util.StringTokenizer token = new StringTokenizer(data, "-T:Z") * и соответственно записать её через colection.replace("ключ", "Новое значение"), */ for(String name : nameFile){ colection.replace(name, "2016-01-06T08:01:00"); System.out.println("Имя: " + name + " DATA: " + colection.get(name)); } } public static TreeMap parsingFolder(String nameFolder) { // Создаём колекцию, для реализации сохранения данных TreeMap temp = new TreeMap() {}; // устанавливаем путь к файлу, каталогу Path pathFile = Paths.get(nameFolder); // определяем является ли путь (nameFolder) каталогом или файлом if(Files.isDirectory(pathFile, LinkOption.NOFOLLOW_LINKS)) { /*  * перебираем каждый файл в каталоге (nameFolder) и записываем * полученные данные в колекцию */ try( DirectoryStream buffer = Files.newDirectoryStream(pathFile) ){ Iterator iterratorDirectory = buffer.iterator(); while(iterratorDirectory.hasNext()) { Path fileDirectory = iterratorDirectory.next(); /* * записали имя файла и дату последней модификации файла в колекцию. * Files.getLastModifiedTime - является атрибутом файла, соотвественно вместо можно * записать и иные данные о файле. Посмотрите методы класса Files типа метод getFileAttrebuteView() * readAttributes(), getAttribute() в API java.. там есть все... */ temp.put( fileDirectory.getFileName().toString(), Files.getLastModifiedTime(fileDirectory, LinkOption.NOFOLLOW_LINKS).toString() ); } }catch(SecurityException | IOException exSecuritu){ System.out.println("ERROR " + exSecuritu); } } else { /* * Данное условие выполняется если указанный при проверки путь являеется файлом */ try{ // записали имя файла и дату модификации файла в колекцию temp.put( pathFile.getFileName().toString(), Files.getLastModifiedTime(pathFile, LinkOption.NOFOLLOW_LINKS).toString() ); }catch(IOException ioE) { System.out.println("ERROR " + ioE); } } return temp; } } Далее я просто не пойму, что Вы хотите? зачем менять дату в *.java файле при создании Map.? Если нужно поменять дату у самого файла это один вопрос, дату в коллекции Map это другой вопрос, если необходимо сохранить коллекцию как файл с данными — то это сериализация и соответственно другой вопрос....... Напишите более подробно пожалуйста, что Вы хотите. Ну либо я уже ответил на Ваш вопрос :)

Комментариев нет:

Отправить комментарий