2013-07-11 7 views
-1

Может ли кто-нибудь помочь мне в этом сценарии?Java: проверка наличия файла

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

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

Проблема в том, что при первом запуске, когда он добирается до new File(generatedFilesFolder).listFiles().length;, он выдает исключение нулевого указателя, потому что сгенерированныйFilesFolder пуст в этой точке.

Я мог бы выполнить эту проверку после generate.next(), но тогда мне пришлось бы спать, что бы победить то, что я пытаюсь архивировать.

Возможно, кто-нибудь скажет мне лучший способ? Я попытался изменить int на Integer, но он все же исключил исключение.

int actualFilesGenerated = new File(generatedFilesFolder).listFiles().length; 
generate.next(); 
///Now I want to give each file 2 minutes to generate otherwise catch and 
// carry on with rest of method. 
try { 
    int currentFilesGenerated = new File(generatedFilesFolder).listFiles().length; 
    int counter = 0; 
    while ((currentFilesGenerated < actualFilesGenerated) & counter < 120) { 
    Thread.sleep(1000); 
    currentFilesGenerated = new File(generatedFilesFolder).listFiles().length; 
    counter++; 
    System.out.println("actualFilesGenerated: " + actualFilesGenerated 
     + " currentFilesGenerated: " + currentFilesGenerated + "counter: " 
     + counter); 
    } 
} catch (InterruptedException e1) { 
    e1.printStackTrace(); 
} 
///rest of method here 
+0

проверить файл с помощью метода 'File.exists()' –

+0

'Файл f = новый файл (generatedFilesFolder);' then' currentFilesGenerated = (f.exists() == false) - 1: f.listFiles(). Length' –

ответ

3

Вы можете использовать File.exists(), чтобы проверить наличие File

File f = new File(generatedFilesFolder) 
if(f.exists()) { 
    // file exists and do the operation 
} 
else { 
    f.createNewFile(); //or f.mkdir() to create directory 
} 
+0

Если 'generatedFilesFolder' называет папку, возможно,' f.mkdir() '. – johnchen902

+0

@ johnchen902 true, я обновил ответ. Спасибо, что подняли его – sanbhat

0

вы можете использовать существует) метод класса File, чтобы проверить (если этот файл присутствует, например

File f=new File(path); 
if(f.exists()) { 
    ..... 
} 
0

есть exist способ. Поэтому проверьте, существует ли доктрина derereory, прежде чем вы получите список файлов.

0

сделайте чек перед тем, как использовать его как.

File file = new File(generatedFilesFolder); 
if(file.exists() && file.isDirectory()) { 
     // do something 
} 
1

Проблема заключается в первый раз, он работает, когда он попадает в новый файл (generatedFilesFolder) .listFiles() длины. он выдает исключение нулевого указателя, потому что сгенерированныйFilesFolder пуст в этой точке.

Это не может быть правдой. Если generatedFilesFolder - это фактически путь к каталогу, но в нем нет файлов, это не вызовет NPE, а вернет пустой массив.

Поэтому вам нужно создать свой каталог, прежде чем идти дальше:

final File file = new File(generatedFilesFolder); 

if (file.exists()) { 
    if (!file.isDirectory()) 
     throw new IllegalStateException("not a directory"); 
} else { 
    if (!files.mkdirs()) 
     throw new IllegalStateException("cannot create directory"); 
} 

// go on 

Наконец: если вы используете Java 7, забыть о File. Используйте Files. У которого есть наблюдатель каталога ...

Смежные вопросы