Перейти к основному содержимому

Имитация сенсорной команды в Java

· 2 мин. чтения

1. Обзор

Команда touch в Linux — это удобный способ изменить время доступа и время модификации файла или каталога. Его также можно использовать для быстрого создания пустого файла.

В этом кратком руководстве мы увидим, как смоделировать эту команду в Java.

2. Используйте обычную Java

2.1. Создайте наш сенсорный метод

Давайте создадим наш сенсорный метод на Java. Этот метод создаст пустой файл, если файл не существует. Он может изменить время доступа или время модификации файла, или и то, и другое.

Более того, он также может использовать пользовательское время, переданное из ввода:

public static void touch(String path, String... args) throws IOException, ParseException {
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
if (args.length == 0) {
return;
}
}
long timeMillis = args.length < 2 ? System.currentTimeMillis() : new SimpleDateFormat("dd-MM-yyyy hh:mm:ss").parse(args[1]).getTime();
if (args.length > 0) {
// change access time only
if ("a".equals(args[0])) {
FileTime accessFileTime = FileTime.fromMillis(timeMillis);
Files.setAttribute(file.toPath(), "lastAccessTime", accessFileTime);
return;
}
// change modification time only
if ("m".equals(args[0])) {
file.setLastModified(timeMillis);
return;
}
}
// other inputs will change both
FileTime accessFileTime = FileTime.fromMillis(timeMillis);
Files.setAttribute(file.toPath(), "lastAccessTime", accessFileTime);
file.setLastModified(timeMillis);
}

Как видно выше, наш метод использует varargs , чтобы избежать перегрузки, и мы можем передать в этот метод произвольное время в формате «дд-мм-гггг чч:мм:сс».

2.2. Используйте наш сенсорный метод

Давайте создадим пустой файл с помощью нашего метода:

touch("test.txt");

И используйте команду stat в Linux для просмотра информации о файле:

stat test.txt

Мы можем увидеть время доступа и модификации файла в статистике :

Access: 2021-12-07 10:42:16.474007513 +0700
Modify: 2021-12-07 10:42:16.474007513 +0700

Теперь давайте изменим его время доступа с помощью нашего метода:

touch("test.txt", "a", "16-09-2020 08:00:00");

Затем мы снова получим информацию об этом файле с помощью команды stat :

Access: 2020-09-16 08:00:00.000000000 +0700
Modify: 2021-12-07 10:42:16.474007000 +0700

3. Используйте Apache Commons Lang

Мы также можем использовать класс FileUtils из библиотеки Apache Commons Lang . Этот класс имеет простой в использовании метод touch() , который также создаст пустой файл, если файл еще не существует:

FileUtils.touch(new File("/home/foreach/test.txt"));

Обратите внимание, что если файл уже существует, этот метод обновит только время модификации файла , а не время доступа.

4. Вывод

В этой статье мы увидели, как имитировать команду touch Linux в Java.

Как всегда, пример кода из этой статьи можно найти на GitHub .