-1

いくつかのことを行うプログラムを作成する必要があります。

  • パラメータを取ります: 検索する単語と検索するパス
  • ファイルで指定された単語を1つずつ探します
  • ファイル内に単語が見つかった場合 -> コンソールに出力filename-file path

可能になるまで、同じ解析アルゴリズムですべてのフォルダーをトラバースします。

抜粋したコードは次のとおりです。

class SearchPhrase {
    // walk to root way
    public void walk(String path, String whatFind) throws IOException {
        File root = new File(path);
        File[] list = root.listFiles();
        for (File titleName : list) {
            if (titleName.isDirectory()) {
                walk(titleName.getAbsolutePath(), whatFind);
            } else {
                if (read(titleName.getName()).contains(whatFind)) {
                    System.out.println("File: " + titleName.getAbsoluteFile());
                }
            }
        }
    }

    // Read file as one line
    public static String read(String fileName) {
        StringBuilder strBuider = new StringBuilder();
        try {
            BufferedReader in = new BufferedReader(new FileReader(new File(fileName).getAbsoluteFile()));
            String strInput;
            while ((strInput = in.readLine()) != null) {
                strBuider.append(strInput);
                strBuider.append("\n");
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return strBuider.toString();
    }

    public static void main(String[] args) {

        SearchPhrase example = new SearchPhrase();
        try {
            example.walk("C:\\Documents and Settings\\User\\Java", "programm");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

プログラムは次のエラーでコンパイルされません:

java.io.FileNotFoundException: C:\Documents and Settings\User\Java Hangman\Java\Anton\org.eclipse.jdt.core.prefs at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:138) at java.io.FileReader.<init>(FileReader.java:72) at task.SearchPhrase.read(SearchPhrase.java:28) at task.SearchPhrase.walk(SearchPhrase.java:16) at task.SearchPhrase.walk(SearchPhrase.java:14) at task.SearchPhrase.main(SearchPhrase.java:48)

たぶん、この問題を解決するための別のアプローチですか?

4

1 に答える 1

3

あなたはここでいくつかの間違いを犯しています..

[...]
  if (read(titleName.getName()).contains(whatFind)) {
                System.out.println("File: " + titleName.getAbsoluteFile());
      }
 [...]

上記のコードでは、ファイル名を read メソッドに渡していますが、これは間違っています。代わりに、次のようにファイル名とそのパスを渡す必要があります...

    if (read(**titleName.getAbsolutePath()**).contains(whatFind)) {
                System.out.println("File: " + titleName.getAbsoluteFile());
     }

ここでは getAbsoluteFile() は必要ありません

   [...]

       BufferedReader in = new BufferedReader(new FileReader(new File(
                fileName).**getAbsoluteFile()**));
   [...]
于 2013-01-22T22:25:54.630 に答える