Итерация по файлу журнала в Java. Вытащить отсканированные файлы - PullRequest
1 голос
/ 05 января 2012

В настоящее время у меня есть файл журнала (см. Ниже), который мне нужно перебрать и вытащить список файлов, которые были отсканированы. Затем, используя этот список файлов, скопируйте отсканированные файлы в другой каталог.

Так что в этом случае он прошел бы и потянул C: \ Tools \ baregrep.exe C: \ Tools \ baretail.exe и т. д.

и затем переместите их в папку, скажем, c: \ folder \ SafeFolder с той же файловой структурой

Хотелось бы, чтобы у меня был пример того, что было на неудачном сканировании, но это даст мне хороший старт, и я, вероятно, смогу разобраться с остальными

Изображение файла журнала Symantec

Спасибо заранее, я очень ценю любую помощь, которую вы мне можете оказать.

Ответы [ 3 ]

1 голос
/ 05 января 2012

Этот вопрос помечен как Java, и как бы я ни любил Java, эту проблему легче и быстрее решить на таком языке, как Perl (поэтому, если вам нужен только конечный результат, и вам не нужноработать в определенной среде, тогда вам может потребоваться использовать язык сценариев.)как есть, только служит руководством ... прошло некоторое время с тех пор, как я написал любой Perl).

use File::Copy;
my $outdir = "c:/out/";
while(<>)
{
  my ($path) = /Processing File\s+\'([^\']+)\'/;
  my ($file) = $path =~ /(.*\\)+([^\\]+)/;
  if (($file) && (-e $path))
  {
    copy($path,$outdir . $file);
  }
}
0 голосов
/ 05 января 2012

Это должно сработать. Теперь просто адаптируйтесь к вашему решению!

public static void find(String logPath, String safeFolder) throws FileNotFoundException, IOException {
    ArrayList<File> files = new ArrayList<File>();

    BufferedReader br = new BufferedReader(new FileReader(logPath));
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = br.readLine()) != null) {
        Pattern pattern = Pattern.compile("'[a-zA-Z]:\\\\.+?'");
        Matcher matcher = pattern.matcher(line);
        if (matcher.matches()) {
        }
        if (matcher.find()) {
            files.add(new File(matcher.group()));
            System.out.println("Got a new file! " + files.get(files.size() - 1));
        }
    }

    for (File f : files) {
        // Make sure we get a file indeed
        if (f.exists()) {
            if (!f.renameTo(new File(safeFolder, f.getName()))) {
                System.err.println("Unable to move file! " + f);
            }
        } else {
            System.out.println("I got a wrong file! " + f);
        }
    }
}
0 голосов
/ 05 января 2012

Это прямо вперед.

  1. Читайте файл журнала построчно, используя NEW_LINE в качестве разделителя. Если это небольшой файл, загрузите его и обработайте с помощью String.split ("\ n") или StringTokenizer

  2. Когда вы зацикливаете каждую строку, вам нужно выполнить простой тест, чтобы определить, содержит ли эта строка «Файл обработки».

  3. Если это так, используется регулярное выражение (сложнее) или простой синтаксический анализ для захвата имен файлов. Он должен быть внутри ['], поэтому обнаружите первое вхождение ['], обнаружите второе и получите строку между ними.

  4. Если ваша строка действительна (вы можете проверить с помощью java.io.File) или уже существует, вы можете скопировать имя файла в другой файл. Я бы не советовал вам копировать его в java для ограничения памяти для начинающих.

  5. Вместо этого скопируйте строку файлов, чтобы сформировать пакетный файл, чтобы скопировать их сразу, используя скрипт Windows, например Windows BAT или Bash Script, например, cp 'filename_from' 'copy_to_dir'

Дайте мне знать, вам нужен рабочий пример

привет

...