-4

私はJavaプログラミングに慣れていないので、名前を出力しようとしていて、フォルダーから複数のテキストファイルを読み込んで、各単語ファイルの単語頻度を数えています。フォルダーを読んでいるときに、すべてのテキストファイルが印刷されますが、読み取られません。コードを見てください。

import java.io.*;
import java.util.StringTokenizer;
import java.util.TreeMap;
public class foldersearch
{
    public static void main(String[] args) 
    {
        // Directory path here
        String path = "/home/sumeet/Documents/text files"; 

        String files;
        File folder = new File(path);
        File[] listOfFiles = folder.listFiles(); 

        for (int i = 0; i < listOfFiles.length; i++) 
        {
            if (listOfFiles[i].isFile()) 
            {
                files = listOfFiles[i].getName();
                if (files.endsWith(".txt") || files.endsWith(".TXT"))
                {
                    System.out.println(files);
                    TreeMap<String, Integer> frequencyMap = new TreeMap<String, Integer>(); 

                    String currentLine="";

                    File textFile = new File(files); // SOME CHANGE IS REQUIRED HERE..?
                    try {
                        BufferedReader br = new BufferedReader(new FileReader(textFile)); 

                        while ((currentLine = br.readLine()) != null) { 
                            currentLine = currentLine.toLowerCase(); 
                            StringTokenizer parser = new StringTokenizer(currentLine, " \t\n\r\f.,;:!?'"); 
                            while (parser.hasMoreTokens()) { 
                                String currentWord = parser.nextToken(); 
                                Integer frequency = frequencyMap.get(currentWord); 
                                if (frequency == null) { 
                                    frequency = 0; 
                                } 
                                frequencyMap.put(currentWord, frequency + 1); 
                            } 
                        }
                        br.close(); 
                    } catch (FileNotFoundException e) {
                        System.out.println(e.getMessage());
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    System.out.println(frequencyMap);
                }
            }
        }
    }
}

出力:

nokia.txt
nokia.txt (No such file or directory)
{}
MainClass.txt
MainClass.txt (No such file or directory)
{}
2b.txt
2b.txt (No such file or directory)
{}
cn exercise 2.txt
cn exercise 2.txt (No such file or directory)
{}
2c.txt
2c.txt (No such file or directory)
{}
dummy.txt
dummy.txt (No such file or directory)
{}
readme.txt
readme.txt (No such file or directory)
{}
Kb.txt
Kb.txt (No such file or directory)
{}
all.txt
all.txt (No such file or directory)
{}
1b.txt
1b.txt (No such file or directory)
{}
todo.txt
todo.txt (No such file or directory)
{}
1c.txt
1c.txt (No such file or directory)
{}
2a.txt
2a.txt (No such file or directory)
{}
USE CASE.txt
USE CASE.txt (No such file or directory)
{}
4

3 に答える 3

1

試す:

File textFile = new File(folder.getAbsolutePath() + File.separator + files);
于 2011-12-16T14:34:58.963 に答える
1

ディレクトリを開こうとする前に、ファイル名の前にディレクトリの名前を追加する必要があります。現在、nokia.txt/2b.txt/etc を開こうとしています。現在のディレクトリから。

于 2011-12-16T14:23:37.630 に答える
1

プログラマーが最初に学ぶ必要があることの 1 つは、エラーが発生したときに何が起こっているのかを自分で把握する方法です。したがって、単に答えを出すだけでは、あまり役に立ちません (ただし、既に答えていることがわかります)。

すべてのプログラマーが取得する必要があるもう 1 つのコア スキルは、複雑さを管理可能なチャンクに分割することです。何年も Java でプログラミングを行ってきた人でさえ、投稿したコードで何が起こっているのかを理解するのは大変な作業です。

さらに進んでいく上で非常に重要なもう 1 つのスキルは、標準ライブラリを理解し、可能な場合はそれを使用することです。これにより、多くの場合、車輪を再発明する必要がなくなります。

以上の3点を踏まえて、私からのアドバイスは次のとおりです。

  • ファイル (またはファイル名を表す文字列) を受け取り、そのファイル内の単語の頻度をカウントする 1 つのメソッドにコードを分割します。そして、読み取りたいすべてのファイルを見つけてループし、それぞれの最初のメソッドを呼び出す別のメソッド。
  • 2 つの方法を別々にテストすると、バグを追跡するのに役立ちます。
  • FileFilter インターフェイスを調べます。
  • File.name() メソッドの Javadoc を注意深く読んでください。
于 2011-12-16T14:40:33.210 に答える