0

こんにちは。ファイル内のキーワードを検索しようとしていますが、出てきたばかりの出力は「ファイルの処理中」です。ファイル内のキーワードを実際に見つけているとは言いません。

ご覧のとおり、フォレンジックのプリセット キーワードを使用し、.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;

            }
        }


    }
}
4

2 に答える 2

1

関数の場合

fileScan()

関数から呼び出されていない

visitFile()

次に、ブレークポイントを設定します

  if (fileName.substring(nameLength, nameLength + 4) == ".txt") {

ロジック/変数を確認してください。

また、代わりに

fileName.substring(nameLength, nameLength + 4) == ".txt"

なぜもっと単純なものを使わないのですか

fileName.toLowerCase().endsWith(".txt")
于 2013-12-09T18:28:15.970 に答える
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();
    }

これにより、ファイルの行全体が読み取られ、その行に「フォレンジック」が含まれているかどうかがチェックされます。または、次のように置き換えることもできます。

while (scanner.hasNextLine()) {

と:

while (scanner.hasNext()) {

オリジナルの方法で。

于 2013-12-09T19:20:30.450 に答える