如何在java中从文本文件/文件夹中获取字数(无需更改文件夹的读取顺序)

如何在java中从文本文件/文件夹中获取字数(无需更改文件夹的读取顺序),java,text,hashmap,filereader,word-count,Java,Text,Hashmap,Filereader,Word Count,在我下面的代码中,它读取文件夹中的.txt文件(假设文件夹中有2000多个文本文件),并显示文本文档中的总字数 如果仅从目录中读取10-30个文本文件,则输出将按每个文本文件的顺序正确显示 但当我添加2000多个文本文件并立即从该文件夹中读取时,输出排列被折叠(它以随机顺序显示) 有人能建议我解决这个问题吗 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java

在我下面的代码中,它读取文件夹中的.txt文件(假设文件夹中有2000多个文本文件),并显示文本文档中的总字数

如果仅从目录中读取10-30个文本文件,则输出将按每个文本文件的顺序正确显示

但当我添加2000多个文本文件并立即从该文件夹中读取时,输出排列被折叠(它以随机顺序显示)

有人能建议我解决这个问题吗

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.io.FileUtils;

public class duplicatestrings
{
public static void main(String[] args) 
{
    FilenameFilter filter = new FilenameFilter() {
        public boolean accept(File dir, String name) {
            return name.endsWith(".txt");
        }
    };

    File folder = new File("E:\\testfolder");
    File[] listOfFiles = folder.listFiles(filter);

    for (int i = 0; i < listOfFiles.length; i++) {
        File file1 = listOfFiles[i];
        try {
            String content = FileUtils.readFileToString(file1);
             // System.out.println("asssdffsssssssssss = " + content);
        } catch (IOException e) {

            e.printStackTrace();
        }

        BufferedReader ins = null;
        try {
            ins = new BufferedReader (
                    new InputStreamReader(
                        new FileInputStream(file1)));
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        }

        String line = "", str = "";

        int a = 0;
        int b = 0;
        try {
            while ((line = ins.readLine()) != null) {
            str += line + " ";
            b++;
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
     //   System.out.println("Total number of lines " +b);

     //System.out.println(str);

    /*    int count =0;
        try {
            String input = ins.readLine();
            String[] array = input.split(" ");
            System.out.print("\nPlease enter word to be counted :");
            String key = ins.readLine();
            for(int s=0;i < array.length;i++){
                if(array[s].equals(key))
                    count++;
            }
            System.out.print("\n The given word occured " + count + " times");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }*/





        StringTokenizer st = new StringTokenizer(str);
        while (st.hasMoreTokens()) {
        String s = st.nextToken();
        a++;

        }

 // List<String> list = Arrays.asList(str.split(" "));

      //  Set<String> uniqueWords = new HashSet<String>(list);
       // for (String word : uniqueWords) {
        //    System.out.println(word + a+ "\n"  + Collections.frequency(list, word));}
           System.out.println(" Total no of words=" + a );


    }
        }
      }
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FilenameFilter;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.io.StringReader;
导入java.util.*;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
导入org.apache.commons.io.FileUtils;
公共类重复字符串
{
公共静态void main(字符串[]args)
{
FilenameFilter筛选器=新建FilenameFilter(){
公共布尔接受(文件目录,字符串名称){
返回名称.endsWith(“.txt”);
}
};
文件夹=新文件(“E:\\testfolder”);
File[]listOfFiles=folder.listFiles(过滤器);
for(int i=0;i
而且我必须从所有文本文件/文件夹(目录)中获得不同且重复的单词“no of counts(only)”


欢迎您的建议。

在计算每个文件中的字数后,您可以将结果插入树集,然后以一致的顺序显示它们。键是文件名,值是字数。见:


或者,您可以对文件夹中的文件名进行排序,并计算排序文件列表中的单词:

我想下面的逻辑将帮助您向其中添加文件读取代码,并用文件中的每一行替换“test”变量

计算单词总数或不重复计算单词总数

   public static void main(String[] args) {
    String test = "I am trying to make make make";
    Pattern p = Pattern.compile("\\w+");
    Matcher m = p.matcher(test);
    HashSet<String> hs =  new HashSet<>();
    int i=0;
    while (m.find()) {
        i++;
        hs.add(m.group());
    }
    System.out.println("Total words Count==" + i);
    System.out.println("Count without Repetation ==" + hs.size());
    }
publicstaticvoidmain(字符串[]args){
String test=“我正在尝试制作”;
模式p=模式。编译(\\w+);
匹配器m=p.匹配器(测试);
HashSet hs=新的HashSet();
int i=0;
while(m.find()){
i++;
hs.add(m.group());
}
System.out.println(“总字数=”+i);
System.out.println(“无重复计数=”+hs.size());
}
输出:

总字数==7

无重复计数==5


希望这有帮助:)

请在输出中详细说明您想要的内容。是否要分别计算每个
.txt
文件的字数?你说的这个订单是什么?当您在windows资源管理器中看到这些文件时,它们是按文件名的字母顺序排列的吗?是的,我希望每个.txt文件都有单独的字数。输出是随机显示的。一些文本文件是按随机顺序排列的。如果我查看(文件1),它只有1000个文件,但在我的目录文件夹中,我有2000多个文件。但是输出“总字数”是对所有2000多个文件的计数。您所说的
是什么意思?输出排列被折叠。(它以随机顺序显示)
我看到您的输出只有总计,没有文件名,所以您怎么知道它不正确?请记住,
folder.listFiles(filter)
可能无法按操作系统的
fileexplorer
中显示的顺序显示文件。我希望按文件资源管理器中显示的字母顺序排列。我对其进行了交叉检查