• 课堂测试-------文件操作


        今天测试java文件内容,但文件还不熟悉,这几天一直在搞JavaWeb,该好好看看Java文件了

    问题一:读入文件中的内容,输出前n个出现最多的字母(将单词分解成字母),区分大小写

    解题思路:首先得先读取文件内容,将一些符号删去,然后提取单词,再提取字母,将它们分别放到52个char类型的数组当然还有它的次数,当然放数组里是由规律的。最后排序。

    代码:这是一个方法,用的时候只需把文件地址传入即可!

    public static void showTheMostAlphabet(String path) {
            double AlphabetNum[] = new double[52];
            char Alphabet[] = new char[52];
            double AlphabetSum = 0;
            int num = 0,a = 0;
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入n:(n为前n个最常出现的字母数)");
            int n = scanner.nextInt();
            File file1 = new File(path); 
            String path1 = "E:/test/新建文本文档 (4).txt";
            File file2 = new File(path1);
            /*
             * 加载缓冲流
             */
            try(BufferedReader br = new BufferedReader(new FileReader(file1));
                BufferedWriter bw = new BufferedWriter(new FileWriter(file2))){
                String line = null; // 逐行读取
                line = br.readLine();
                while(line!=null) {
                    // 将字符串按指定要求分割
                    StringTokenizer st = new StringTokenizer(line," .,?;!
    :“”‘: ");
                   while(st.hasMoreElements()) {
                       String str =(String)st.nextElement();
                       for(int i = 0;i<str.length();i++) {
                           if(str.charAt(i)>=65&&str.charAt(i)<=90) {
                               Alphabet[str.charAt(i)-65] = str.charAt(i);
                               AlphabetNum[str.charAt(i)-65]++;
                           }else if(str.charAt(i)>=97&&str.charAt(i)<=122) {
                               Alphabet[str.charAt(i)-71] = str.charAt(i);
                               AlphabetNum[str.charAt(i)-71]++;
                                   }
                               }
                       }                  
                   line=br.readLine();  
                }
                /*
                 * 按大小给字母排序
                 */
                for(int i=0;i<52;i++) {
                    for(int j=i+1;j<52;j++) {
                        if(AlphabetNum[j]>AlphabetNum[i]) {
                            double temp=AlphabetNum[i];
                            AlphabetNum[i]=AlphabetNum[j];
                            AlphabetNum[j]=temp;
                            char Temp=Alphabet[i];
                            Alphabet[i]=Alphabet[j];
                            Alphabet[j]=Temp;
                        }
                    }
                }
                // 字母的总数
                for(int i = 0;i<52;i++) {
                    AlphabetSum+=AlphabetNum[i];
                }
                /*
                 *  输出前n个出现最多的字母,并输出次数和百分比
                 */
                for(int i = 0;i < n;i++) {
                    System.out.print(i+1+": "+Alphabet[i]+"    次数:"+AlphabetNum[i]+"        百分比:");
                    
                    System.out.printf("%.2f",AlphabetNum[i]/AlphabetSum*100);
                    System.out.println("%");
                    
                }
                
            }catch(Exception e) {
                e.printStackTrace();
            }
        }

    运行结果:

    问题2:和问题1一样,只不过是将字母换成单词。

    代码:

        /*
         *  输出指定文件里前n个最常出现的单词
         */
        public static void showTheMostWord(String path) {
            double wordNum[] = new double[100000];
            String word[] = new String[100000];
            double wordSum = 0;
            int num = 0,a = 0;
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入n:(n为前n个最常出现的单词数)");
            int n = scanner.nextInt();
            File file = new File(path);
            // 加载缓冲流
            try(BufferedReader br = new BufferedReader(new FileReader(file))){
                String line = null; // 逐行读取
                line = br.readLine();
                while(line!=null) {
                    StringTokenizer st = new StringTokenizer(line," ".,?;!
    :“”‘: ");
                   while(st.hasMoreElements()) {
                       String str =(String)st.nextElement();
                       // 判断重复的单词
                       for(int i = 0;i < num;i++) {
                           if(str.equals(word[i])) {
                               wordNum[i]++;
                               }else {
                                   a++;
                               }
                       }
                       if(a==num) {
                           word[num] = str;
                           wordNum[num]++;
                           num++;
                       }
                       a = 0;
                   }                  
                   line=br.readLine();  
                }
                /*
                 * 按大小给单词排序
                 */
                for(int i=0;i<num;i++) {
                    for(int j=i+1;j<num;j++) {
                        if(wordNum[j]>wordNum[i]) {
                            double temp=wordNum[i];
                            wordNum[i]=wordNum[j];
                            wordNum[j]=temp;
                            String Temp=word[i];
                            word[i]=word[j];
                            word[j]=Temp;
                        }
                    }
                }
                /*
                 *  输出前n个出现最多的单词,并输出次数
                 */
                for(int i = 0;i < n;i++) {
                    System.out.println(i+1+": "+word[i]+"    次数:"+wordNum[i]);
                }
                
            }catch(Exception e) {
                e.printStackTrace();
            }    
        }

    运行结果:

    问题3:输出文件里的全部单词。(把问题2里的n改成num即可,记得删去获取n的操作)

    运行结果:

     问题4:到指定执行功能2;

    解题思路:得考录是否为目录,而且如果文件不是txt文件的话就会报错。当然即使是txt文件,有可能内容为空,所有还需判断内容是否为空

    代码:

    /*
         *  到指定文件执行指定功能
         */
        
        public static void test(File f) {
            if(f.isDirectory()) {
                File[] files = f.listFiles();
                for(File temp:files) {
                    if(temp.getName().endsWith("txt")) {
                        if(temp.length()==0) {
                            System.out.println(temp.getAbsolutePath()+"是个空文件");
                            continue;
                        }else {
                            System.out.println(temp.getAbsolutePath());
                            showTheMostWord(temp.getAbsolutePath());
                        }
                        
                    }
                    test(temp);                    
                }
            }
        }

    运行结果: 

    问题5:利用递归遍历文件

    解题思路:利用递归方法,如果是目录则继续递归,然后输出文件名。

    代码:

    /*
     *  利用递归输出给定目录的子文件
     */
        public static void printFileTree(File f) {
            if(f.isDirectory()) { // 判断是否为目录
                File[] files = f.listFiles();  // 将子文件存在File数组里
                for(File temp:files) {  // 遍历整个数组                
                    printFileTree(temp);
                    System.out.println(temp.getAbsolutePath());
                    
                }
            }        
        }

    运行结果:

     如果有大佬发现错误,请留言提示,正在学习中,感谢提错误!!!!!谢谢!!!!!!

  • 相关阅读:
    auto_ptr解析
    C++ auto_ptr智能指针的用法
    C++ 默认构造函数
    phpdisk 盲注 &前台任意用户登录
    冒泡排序
    关于C++中的友元函数的总结
    python中的闭包
    reverse Polish notation
    PostScript
    sqlite
  • 原文地址:https://www.cnblogs.com/yangxiao-/p/11799406.html
Copyright © 2020-2023  润新知