在Java中遍历一个日志文件。拉文件扫描
我目前有一个日志文件(见下文),我需要迭代并提取已扫描文件的列表。然后通过使用该文件列表将扫描的文件复制到不同的目录中。在Java中遍历一个日志文件。拉文件扫描
所以在这种情况下,它会经过拉 C:\工具\ baregrep.exe C:\工具\ baretail.exe 等等等等
,然后将它们移动到文件夹,例如c :\文件夹\ SafeFolder具有相同的文件结构
我希望我能有什么样的输出是一个失败的扫描样本,但是这将让我一个很好的开端,我大概可以算出其余出
非常感谢您的帮助,我非常感谢您借给我的帮助。
这应该可以做到。现在,适应您的解决方案!
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);
}
}
}
它很简单。
使用NEW_LINE作为分隔符逐行读取日志文件。如果这是一个小文件,随时通过String.split加载它&处理它(“\ n”)或StringTokenizer的
当你循环每一行,你需要做一个简单的测试,如果该字符串检测包含“处理文件”。
如果是这样,使用正则表达式(更难)或简单的解析来捕获文件名。它应该在[']之内,因此检测[']的第一次出现,然后检测第二次,并获取中间的字符串。
如果您的字符串是有效的(您可以使用java.io.File进行测试)或现有的,则可以将文件名复制到另一个文件。我不会建议你不要在java中复制它以满足初学者的内存限制。
相反,复制文件的字符串,形成一个批处理文件来同时使用OS脚本如Windows BAT或bash脚本,例如CP'filename_from“copy_to_dir”
让我将它们复制知道你需要
问候
一个可行的例子如果不是太痛苦的话会很好。 – Heuristic 2012-01-04 22:07:47
工作示例这个问题被标记为Java和像我爱的Java,这个问题是什么,会更容易和更快地解决语言如Perl(所以如果你只想要最终结果和d o不需要在特定的环境中运行,那么您可能希望使用脚本语言)。
不是一个可行的实现,但是下面的代码是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);
}
}
请注意他在第5行和第6行发生了什么。您可以使用RegEx直接在Java中执行此操作。他一行一行地阅读,并使用正则表达式分组来提取他传递的复制的特定文件名。不想在Java中这样做,你可能会害怕Perl(我这样做)......给groovy一个镜头。 – 2012-01-04 23:06:18
这看起来像会起作用。但是,我会在哪里放置从“处理文件”之后和下一个“之前”拉出的位置。“只是得到文件路径输出 – Heuristic 2012-01-05 16:30:00
任何人有任何输入? 再次感谢您的帮助。 – Heuristic 2012-01-06 16:28:31
我不明白你的问题,你可以再试一次并解释一下吗? – SHiRKiT 2012-01-07 17:32:48