您好。我正在尝试在文件中搜索关键字,但我刚刚出现的输出是“处理文件”。它不会说它实际上是在文件中找到关键字。
可以看出,我使用了预设的取证关键字,并告诉我的程序在.txt
文件中查找。
我得到的问题是它只说“处理文件”;输出不会显示已找到任何关键字,这是该项目的主要目标。
我无法解决我在哪里出错,任何帮助都会非常感激。
package filelistingvisitor;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Scanner;
public final class FileListingVisitor {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
String ROOT = "F:\\";
FileVisitor<Path> fileProcessor = new ProcessFile();
Files.walkFileTree(Paths.get(ROOT), fileProcessor);
}
private static final class ProcessFile extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult visitFile(
Path aFile, BasicFileAttributes aAttrs) throws IOException {
System.out.println("Processing file:" + aFile);
String fileName = aFile.toString();
int nameLength = fileName.length() - 4;
if (fileName.substring(nameLength, nameLength + 4) == ".txt") {
fileScan(aFile);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(
Path file, IOException e) throws IOException {
System.err.printf("Visiting failed for %s\n", file);
return FileVisitResult.SKIP_SUBTREE;
}
@Override
public FileVisitResult preVisitDirectory(
Path aDir, BasicFileAttributes aAttrs) throws IOException {
System.out.println("Processing directory:" + aDir);
return FileVisitResult.CONTINUE;
}
}
public static void fileScan(Path aFile) throws FileNotFoundException, IOException {
String searchterm = "forensics" ;
Scanner scanner = new Scanner(aFile);
while (scanner.hasNextLine()) {
String nextToken = scanner.next();
if (nextToken.equalsIgnoreCase(searchterm)) {
System.out.println("Phrase Found" + searchterm + "in file" + aFile);
break;
}
}
}
}
答案 0 :(得分:1)
如果功能
fileScan()
未从函数
调用visitFile()
然后我会在
上设置一个断点 if (fileName.substring(nameLength, nameLength + 4) == ".txt") {
并检查你的逻辑/变量。
此外,而不是
fileName.substring(nameLength, nameLength + 4) == ".txt"
为什么不使用像
这样简单的东西fileName.toLowerCase().endsWith(".txt")
答案 1 :(得分:0)
正如粘土更多提到更换:
fileName.substring(nameLength, nameLength + 4) == ".txt"
使用:
fileName.toLowerCase().endsWith(".txt")
更清洁。调用NoSuchElementException
时,您可能仍会遇到fileScan
。像这样修改方法:
public static void fileScan(Path aFile) throws FileNotFoundException, IOException {
String searchterm = "forensics" ;
Scanner scanner = new Scanner(aFile);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.contains(searchterm)) {
System.out.println("Phrase Found " + searchterm + " in file" + aFile);
break;
}
}
scanner.close();
}
这将读取文件的整行,然后检查该行中是否包含“forensics”。或者,您可以替换:
while (scanner.hasNextLine()) {
使用:
while (scanner.hasNext()) {
用原始方法。