Как мне обратиться к каталогу в Java? - PullRequest
5 голосов
/ 28 января 2010

Я использую Windows и пытаюсь сослаться на каталог. Моя функция начинается так:

File file = new File("C:\\somedir\\report");
if (!file.exists()) {
  file.mkdirs();
}
doStuffWith(file);

Я получил исключение NullPointerException в функции doStuffWith, когда пытался вызвать listFiles. Ну, я посмотрел в C: \ somedir и что я нашел - там есть файл с именем «report» без расширения, а также каталог с именем «report»! Казалось, что произошло, что объект file имел в виду файл отчета , а не каталог . Как мне убедиться, что я имею в виду каталог, а не файл?

Ответы [ 4 ]

3 голосов
/ 28 января 2010

Один из способов - передать файловый объект, соответствующий «C: \ somedir», методу и внутри метода, выполнить listFiles () и просмотреть содержимое, каждый раз проверяя имя файла и, это «отчет», сделать isDirectory (). продолжить с фактической обработкой, когда это возвращает true.

3 голосов
/ 28 января 2010

Я думаю, что есть метод isDirectory (), который скажет вам, является ли он каталогом

- EDIt

, это то, что я получаю за то, что я так рано встал.Я запускал твой код локально, и он прекрасно работает для меня.Удалось создать новые файлы, прочитать содержимое каталога и т. Д. Что еще вы пытаетесь сделать?

1 голос
/ 28 января 2010

Я не понимаю проблемы, это прекрасно работает для меня:

public class MkDir {
    static void doStuff(File dir) {
        if ( dir.isDirectory() ) {
            File[] listFiles = dir.listFiles();
            for ( File f : listFiles ) {
                System.out.println( f.getName() );
            }
        }
    }

    public static void main(String[] args) {
        File file = new File( "C:\\dev\\rep2\\rep" );
        if ( !file.exists() ) {
            file.mkdirs();
        }
        doStuff( file );
    }
}
0 голосов
/ 28 января 2010

Убедитесь, что в вашей файловой системе включена чувствительность к регистру (HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive в реестре.)

Если это так, возможно, вас укусила проблема, связанная с делом. Один из способов проверить:

String someName = "./nameNotUsedYet";
boolean first = new File(someName).mkdirs();
boolean second = new File(someName.toUpperCase()).mkdirs();
System.out.println("first = " + first + ", second = " + second);

Если оба вызова mkdirs() были выполнены успешно, вы знаете, что у вас есть осложнение, связанное с делом. Если это так, убедитесь, что вы правильно поняли "C:\somedir\report".

...