Ходить по файловой системе Linux / Unix с Java? - PullRequest
1 голос
/ 17 декабря 2009

Мне нужно создать утилиту Java, которая будет проходить через файловую систему Unix (и / или Linux) и построить объектную модель структуры каталогов, получить информацию о файле - размер, дата создания, дата последнего доступа и т. Д. - плюс Мне нужно получить информацию о физическом устройстве хранения, на котором находятся файлы. В идеале эта утилита будет переносимой. У меня нет опыта работы со стандартными библиотеками Java и только ограниченный опыт работы с Unix.

Существуют ли стандартные библиотеки Java, которые будут работать с файловой системой Unix? Или мне придется делать нативные вызовы через какой-то API, а потом беспокоиться о переносимости? Какие варианты у меня есть?

Ответы [ 4 ]

5 голосов
/ 17 декабря 2009

Проверьте Apache Commons IO и FileUtils.iterator () в частности. Это позволит вам перемещаться по файловой системе. Использование итератора лучше, чем создание огромного списка файлов-кандидатов, в основном из-за потенциальных проблем с памятью.

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

Примечание. Многие файловые системы Unix сообщают вам ctime, то есть дату создания inode , а не дату создания файла.

3 голосов
/ 27 июня 2013

В JDK7 новый пакет java.nio.file предоставляет полезные утилиты для работы с файлами. В частности, класс java.nio.file.Files имеет методы walkFileTree(..) и другие служебные функции, связанные с файлами.

См. Документ API JDK7: http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html

3 голосов
/ 17 декабря 2009

Вы можете использовать: java.io.File , для этого он может не содержать всю необходимую вам информацию (например, информацию о физическом хранилище), но он поможет вам создать большую часть логики, которую вы необходимо.

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

Вот рабочий образец:

import java.io.File;


public class FileWalkTest {
    public static void main(String[] args) {
        File file = new File("/Users/oscarreyes/code/");
        printInfo( file );
    }
    public static void printInfo( File dir ) {
        for( File child : dir.listFiles() ) {
            if( child.isDirectory() ) {
                System.out.println( "\n"+child.getAbsolutePath());
                printInfo( child );
            } else {
                System.out.printf("%s read:%s write:%s xecute:%s, size:%d lastModified:%d %n", child.getName(),  child.canRead(), child.canWrite(), child.canExecute(), child.length(), child.lastModified());
            }
       }
        System.out.println();

    }
}
2 голосов
/ 17 декабря 2009

java.io.File - ваш друг здесь. У него есть несколько методов, которые позволяют вам составить список содержимого каталога и определить, является ли он файлом или каталогом. Если это каталог, то вам просто нужно вернуться к нему. Если вы знаете, что объект, который у вас есть, это файл, то есть методы, которые вы можете вызвать, чтобы получить конкретные сведения.

Взгляните на http://java.sun.com/j2se/1.5.0/docs/api/

Полагаю, что это вполне портативно

Dave

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...