2013-07-18 2 views
7

я следовал за этим question:Java - прочитать многие текстовые файлы на папку и обрабатывать их

Теперь в моем случае у меня есть 720 файлов с именами таким образом: «Дом 24 мар 2013_00.50.35_128.txt», каждый файл имеет другую дату и время. На этапе тестирования я использовал Сканер с конкретным txt-файлом для выполнения некоторых операций над ним:

Сканер s = новый сканер (новый файл ("stuff.txt"));

Мой вопрос:

Как я повторно использовать сканер и читать все 720 файлов без необходимости устанавливать точное название на сканере?

Благодаря

+0

посмотреть здесь http://stackoverflow.com/questions/189094/how-to-scan-a-folder-in-java – sotix

+0

Можете ли вы просто прочитать все файлы в каталоге или у вас есть больше файлов, которые вы не хотите читать с помощью других схем именования в каталоге? –

+1

Вы не можете. Для каждого файла будет создан новый сканер. –

ответ

14

Если у вас есть все файлы в одном месте:

File dir = new File("path/to/files/"); 

for (File file : dir.listFiles()) { 
    Scanner s = new Scanner(file); 
    ... 
    s.close(); 
} 

Обратите внимание, что если у вас есть какие-либо файлы, которые вы не хотите включать, вы можете дать listFiles() в FileFilter аргумент отфильтруйте их.

+0

Да, все файлы находятся в одной папке. – alessandrob

+2

Черт, ты просто избил меня :) +1 за то, что бил меня до ответа –

+2

+1 для закрытия сканера. –

6

Да, создайте свой файловый объект, указав его в каталог, а затем перечислите файлы этого каталога.

File dir = new File("Dir/ToYour/Files"); 

if(dir.isDir()) { 
    for(File file : dir.listFiles()) { 
     if(file.isFile()) { 
     //do stuff on a file 
     } 
    } 
} else { 
    //do stuff on a file 
} 
1
File file = new File(folderNameFromWhereToRead); 

    if(file!=null && file.exists()){ 
     File[] listOfFiles = file.listFiles(); 

     if(listOfFiles!=null){ 

      for (int i = 0; i < listOfFiles.length; i++) { 
       if (listOfFiles[i].isFile()) { 
         // DO work 
       } 
      } 
     } 
    } 
+0

Я не эксперт, но я думаю, что ваш 'if (listOfFiles! = Null)' не нужен. Вы только что создали 'listOfFiles', так как это может быть null? –

+0

Ughh .. то же самое с вашим 'if (file! = Null)' ... вы проверяете, существует ли ссылка на объект, которую вы только что сделали до теста! –

+0

Нулевая проверка на 'lisOfFiles' в порядке (это может произойти, если путь существует, но является файлом), но в' файле' не требуется. +1 для проверки 'isFile()' в любом случае. –

3

Вы можете попробовать это таким образом

File folder = new File("D:\\DestFile"); 
File[] listOfFiles = folder.listFiles(); 

for (File file : listOfFiles) { 
if (file.isFile()&&(file.getName().substring(file.getName().lastIndexOf('.')+1).equals("txt"))) { 
    // Scanner 
    } 
} 
+0

+1 для 'isFile()' check. –

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