使用Java迭代日志文件。拉动扫描的文件

时间:2012-01-04 21:47:12

标签: java symantec

我目前有一个日志文件(见下文),我需要迭代并提取扫描的文件列表。然后,通过使用该文件列表将扫描的文件复制到不同的目录中。

所以在这种情况下,它会经历并拉动 C:\工具\ baregrep.exe C:\工具\ baretail.exe 等等

然后将它们移动到一个文件夹,例如具有相同文件结构的c:\ folder \ SafeFolder

我希望我有一个关于扫描失败时输出结果的样本,但是这将使我有一个良好的开端,我可以想出其余的

Symantec Image of Log File

先谢谢了,我真的很感激您可以借给我的任何帮助。

3 个答案:

答案 0 :(得分:1)

这个问题被标记为Java,并且尽管我喜欢Java,但这个问题可以更容易,更快速地用Perl等语言解决(所以如果你只想要最终结果而不需要在特定环境中运行,然后您可能希望使用脚本语言。)

不是一个有效的实现,但是下面的代码就是perl所需的全部内容:(语法未经测试,可能会被破坏,仅用作指南......自从我编写任何perl以来已经有一段时间了。)< / p>

use File::Copy;
my $outdir = "c:/out/";
while(<>)
{
  my ($path) = /Processing File\s+\'([^\']+)\'/;
  my ($file) = $path =~ /(.*\\)+([^\\]+)/;
  if (($file) && (-e $path))
  {
    copy($path,$outdir . $file);
  }
}

答案 1 :(得分:0)

直截了当。

  1. 使用NEW_LINE作为分隔符逐行读取日志文件。如果这是一个小文件,请随意加载它&amp;通过String.split(“\ n”)或StringTokenizer

  2. 处理它
  3. 当你循环每一行时,你需要做一个简单的测试来检测该字符串是否包含'处理文件'。

  4. 如果是这样,使用正则表达式(更难)或简单解析来捕获文件名。它应该在[']之内,因此检测第一次出现的['],然后检测第二次出现,并获取它们之间的字符串。

  5. 如果您的字符串有效(您可以使用java.io.File测试)或现有字符串,则可以将文件名复制到另一个文件。我不建议你不要在java中复制它以获取初学者的内存限制。

  6. 相反,复制文件字符串以形成批处理文件,使用OS脚本(如Windows BAT或Bash脚本)立即复制它们,例如cp'filename_from''copy_to_dir'

  7. 让我知道你需要一个有效的例子

    问候

答案 2 :(得分:0)

这应该可以解决问题。现在,只需适应您的解决方案!

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);
        }
    }
}